Появление Python в качестве (почти) предпочтительного языка для программистов-энтузиастов ИИ вызвало большой интерес к таким структурам данных, как массивы, особенно массивы Numpy. Я всегда боролся с их пониманием, и если я не использую их какое-то время, мне приходится напоминать. Поэтому решил написать небольшое введение, на которое я могу сослаться в будущем.

Что такое массивы Numpy:

Массивы NumPy — это структуры данных, позволяющие эффективно обрабатывать и вычислять числовые данные в Python. Они похожи на обычные списки Python, но оптимизированы для числовых операций и могут обрабатывать большие объемы данных более эффективно, чем обычные списки. Что делает их быстрее и эффективнее, чем списки, так это то, что массив Numpy может иметь только один тип данных для каждого элемента, который он содержит, поэтому все элементы должны быть целыми числами или строками и так далее. Но списки, с другой стороны, могут одновременно содержать разные типы данных. Имея все элементы в виде одного типа данных, массивы не должны хранить тип данных для каждого элемента, что делает их намного более эффективными с точки зрения использования памяти, а обработка данных, хранящихся в массивах, происходит намного быстрее.

Размеры в массивах Numpy:

В NumPy размеры массива относятся к количеству осей или «степеней свободы», которые имеет массив. Например, одномерный массив имеет только одну ось, двумерный массив имеет две оси (иногда называемые строками и столбцами), а трехмерный массив имеет три оси (иногда называемые страницами, строками и столбцами). столбцы).

Каждая ось массива представляет разные измерения данных, содержащихся в массиве. Например, в двумерном массиве первая ось представляет строки массива, а вторая ось представляет столбцы. В трехмерном массиве первая ось представляет страницы массива, вторая ось представляет строки, а третья ось представляет столбцы.

Размеры массива важны, потому что они определяют форму и размер массива, а также влияют на доступ к массиву и управление им. Например, размеры массива определяют количество индексов, необходимых для доступа к элементу массива, а также размер и форму массива при его отображении или построении.

В целом, размерность массива является фундаментальным свойством массива, определяющим его поведение и то, как его можно использовать в числовых вычислениях.

Создание массивов Numpy:

Чтобы создать массив NumPy, вы можете использовать функцию np.array(), которая принимает в качестве аргумента обычный список Python или подобный массиву объект и возвращает массив NumPy. Например:

import numpy as np

# create a 1-dimensional array
array1d = np.array([1, 2, 3, 4, 5])

# create a 2-dimensional array
array2d = np.array([[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]])

# create a 3-dimensional array
array3d = np.array([[[1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12]],
 [[13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24]]])

В этих примерах мы создаем три массива NumPy разных размеров (одномерный, двухмерный и трехмерный) с помощью функции np.array(). Вы можете указать размеры массива, предоставив соответствующее количество вложенных списков в аргументе функции np.array().

Кроме того, вы можете создать массив определенной формы и заполнить его определенным значением, используя функции np.full() или np.zeros(). Например:

# create a 2x3 array filled with zeros
array2d = np.zeros((2, 3))

# create a 3x4x5 array filled with the value 1
array3d = np.full((3, 4, 5), 1)

В этих примерах мы создаем массивы NumPy заданной формы и заполняем их нулями или определенным значением с помощью функций np.zeros() и np.full() соответственно. Это может быть полезно, когда вы хотите создать массив с определенной формой и начальными значениями, не указывая каждый элемент массива по отдельности.

Размеры в массивах Numpy:

В NumPy размеры массива — это количество осей или компонентов, которые имеет массив. Например, одномерный массив имеет одно измерение (одну ось), двухмерный массив имеет два измерения (две оси), а трехмерный массив имеет три измерения (три оси).

Чтобы создать многомерный массив NumPy, вы можете использовать функцию numpy.array() и указать размеры массива с помощью параметра shape. Этот параметр должен быть кортежем целых чисел, указывающим размер массива по каждому измерению.

Например, чтобы создать трехмерный массив NumPy с 2 глубинами, 3 строками и 4 столбцами, вы можете использовать следующий код:

import numpy as np
arr = np.array(shape=(2, 3, 4))

Переменная arr теперь будет содержать 3D-массив NumPy с указанными размерами. Новый массив будет иметь неинициализированные значения, поэтому вам нужно будет заполнить массив значениями перед его использованием, так как по умолчанию все элементы инициализируются равными 0. Вы также можете создать массив определенной формы с элементами, инициализированными случайными числами:

arr = np.random.random(size=(2, 3, 4))

Если вы не знаете форму или размеры массива, вы можете использовать следующий код, чтобы узнать:

#this will return the shape of the array
arr.shape

#the following will return the number of dimensions of the array
arr.ndim

Доступ к определенным элементам массива:

Чтобы получить доступ к элементам в массиве NumPy, вы можете использовать квадратные скобки и указать индексы элементов, к которым вы хотите получить доступ. Это похоже на то, что вы делаете в списках или других типах данных, где вы можете получить доступ к элементам по их порядковым номерам, однако массив может иметь несколько измерений, поэтому необходимо учитывать это.

Например, предположим, что у вас есть следующий массив NumPy:

arr = np.array([[1, 2, 3], [4, 5, 6]])

Чтобы получить доступ к элементу в первой строке и первом столбце arr, вы можете использовать следующий код:

element = arr[0, 0]

Приведенный выше код вернет значение 1, которое является элементом в позиции (0, 0) в arr.

В общем, для доступа к элементу в i-й строке и j-м столбце массива NumPy arr вы можете использовать следующий код:

element = arr[i, j]

Обратите внимание, что в NumPy индексы начинаются с 0, поэтому первая строка имеет индекс 0, вторая строка — индекс 1 и так далее. То же верно и для столбцов: первый столбец имеет индекс 0, второй столбец — индекс 1 и так далее.

Чтобы получить доступ к элементам в массиве NumPy с более чем двумя измерениями, вы можете использовать список индексов, разделенных запятыми, чтобы указать положение элемента, к которому вы хотите получить доступ. Например, предположим, что у вас есть следующий трехмерный массив NumPy:

arr = np.array([[[1, 2, 3], [4, 5, 6]], [[7, 8, 9], [10, 11, 12]]])

Приведенный выше массив имеет 3 измерения, и измерения представлены количеством строк, столбцов и глубин в массиве. Чтобы получить доступ к элементу в первой строке, первом столбце и первой глубине arr, вы можете использовать следующий код:

element = arr[0, 0, 0]

Приведенный выше код вернет значение 1, которое является элементом в позиции (0, 0, 0) в arr.

В общем, для доступа к элементу в i-й строке, j-м столбце и k-й глубине массива NumPy arr вы можете использовать следующий код:

element = arr[i, j, k]

Индексы для каждого измерения разделяются запятой, а количество используемых индексов должно соответствовать количеству измерений в массиве.

Вы также можете установить для определенного элемента определенное значение, используя тот же принцип. Так, например, если мы хотим установить элемент в позиции (0,2,0) на 3, следующий код будет таким:

arr[0, 2, 0] = 3

Изменение массива Numpy:

Чтобы изменить форму массива NumPy, вы можете использовать метод ndarray.reshape(). Этот метод позволяет указать новую форму массива в виде кортежа и возвращает новый массив с указанной формой.

Например, предположим, что у вас есть следующий одномерный массив NumPy:

arr = np.array([1, 2, 3, 4, 5, 6])

Чтобы изменить форму arr на двумерный массив с 3 строками и 2 столбцами, вы можете использовать следующий код:

new_arr = arr.reshape(3, 2)

Переменная new_arr теперь будет содержать 2D-массив NumPy с теми же элементами, что и arr, но другой формы. Новый массив будет выглядеть так:

[[1, 2], 
 [3, 4], 
 [5, 6]]

Обратите внимание, что метод ndarray.reshape() не изменяет исходный массив, а возвращает новый массив указанной формы. Это означает, что вы должны привести его к переменной, чтобы сохранить то, что возвращается, фактический массив не изменяется. Если вы хотите изменить форму исходного массива, вы можете вместо этого использовать метод ndarray.resize(). Этот метод изменит исходный массив на месте, поэтому вам не нужно назначать результат новой переменной.

Например, чтобы изменить форму arr на месте на двумерный массив с 3 строками и 2 столбцами, вы можете использовать следующий код:

arr.resize(3, 2)

После запуска приведенного выше кода переменная arr теперь будет содержать следующий массив:

[[1, 2],
 [3, 4],
 [5, 6]]

Теперь вместо преобразования в разные измерения, что, если вы хотите «повернуть» массив? Это называется транспонированием. Чтобы транспонировать массив NumPy, вы можете использовать атрибут ndarray.T массива. Этот атрибут возвращает новый массив с теми же элементами, что и исходный массив, но с перестановкой строк и столбцов.

Например, предположим, что у вас есть следующий двумерный массив NumPy:

arr = np.array([[1, 2, 3], [4, 5, 6]])

Приведенный выше массив имеет 2 строки и 3 столбца, поэтому он выглядит так:

[[1, 2, 3],
 [4, 5, 6]]

Чтобы транспонировать массив, вы можете использовать атрибут ndarray.T следующим образом:

new_arr = arr.T

Переменная new_arr теперь будет содержать новый 2D-массив NumPy с теми же элементами, что и arr, но с перестановкой строк и столбцов. Новый массив будет выглядеть так:

[[1, 4],
 [2, 5],
 [3, 6]]

Обратите внимание, что атрибут ndarray.T не изменяет исходный массив, а возвращает новый массив с переставленными строками и столбцами. Если вы хотите транспонировать исходный массив на месте, вместо этого вы можете использовать метод ndarray.transpose(). Этот метод изменит исходный массив на месте, поэтому вам не нужно назначать результат новой переменной.

Например, чтобы транспонировать массив arr на месте, вы можете использовать следующий код:

arr.transpose()

После запуска приведенного выше кода переменная arr теперь будет содержать следующий массив:

[[1, 4],
 [2, 5],
 [3, 6]]

Во части 2 мы поговорим о нарезке массивов Numpy, а также о выполнении арифматических операций с массивами Numpy.

Больше контента на PlainEnglish.io.

Подпишитесь на нашу бесплатную еженедельную рассылку новостей. Подпишитесь на нас в Twitter, LinkedIn, YouTube и Discord.

Хотите повысить узнаваемость и принятие вашего технологического стартапа? Посмотрите Цирк.