Библиотека Numpy

Работа с массивами в Python Numpy.
16 октября 2017326451Илья Бубнов83577

Numpy – главная библиотека для Python, если речь идёт о математике. Вам необходимо освоить её в совершенстве, если планируете связать свою жизнь с наукой, большими данными или искусственным интеллектом. В Python библиотека Numpy незаменима для работы с числовыми массивами, векторами и матрицами, а также позволяет строить графики и гистограммы. Давайте познакомимся с базовыми возможностями поближе.

Создаем массивы

Существует несколько способов создания в numpy python массивов. Например, можно сгенерировать обычный список в Python, а можно воспользоваться специальной функцией array:

a = np.array([1,2,3])

Тип массива при этом совпадает с типом элементов. В указанном примере это будет int64. Если типы различные, то массиву присваивается более точный:

a = np.array([1,2,3.5])

Получаем:
array([ 1. ,  2. ,  3.5])

Обратите внимание на форму записи: без квадратных кавычек создание python numpy массива обречено на провал, так как система распознает в числах аргументы, а не последовательность.

Частая ошибка заключается в вызове массива с несколькими числовыми аргументами, а не в предоставлении одного списка чисел в качестве аргумента.

a = np.array(1,2,3)    # Неправильная запись
a = np.array([1,2,3])  # Правильная

Создание матрицы записывается аналогично:

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

Тип массива также может указать явно во время создания:

a = np.array( [ [0,1], [2,3] ], dtype=complex )

Тогда полученная единичная матрица будет иметь вид:

array([ [ 0.+0.j,  1.+0.j],
          [ 2.+0.j, 3.+0.j] ])

Кстати, по умолчанию dtype созданного массива — float64.

При создании массива часто элементы ещё неизвестны, но известен размер. Для таких случаев в NumPy предусмотрено несколько функций для автозаполнения:

  • функция numpy zeros создает массив, полный нулей;
  • функция ones позволяет создать массив, заполненный единицами;
  • функция numpy empty создает массив, исходное содержимое которого является случайным и зависит от состояния памяти.
  • функция numpy arange позволяет создать массив чисел, где начальным элементом является первый аргумент, конечным - второй, а третий аргумент является шагом:

np.arange( 1, 3, 0.5 )

Получаем:
array([1. , 1.5, 2. , 2.5])

В случае arange необходимо быть осторожными, если аргументом является число с плавающей запятой. В этом случае тяжело предсказать точное количество элементов. Для решения задачи лучше подойдёт функция linspace, где вместо размера шагов используется их количество:

np.linspace( 1, 2, 4 )

Получаем:
array([1. , 1.25 , 1.5, 1.75])

Базовые операции

Простые арифметические операции выполняются массивами поэлементно. Новый массив создается и заполняется результатом.

a = np.array([ [1,2], [3,4] ])

b = np.array([ [4,5], [6,7] ])
c = a+b;

Получаем:
array( [ [5, 7], [9, 11] ])

Использование оператора * также означает в numpy поэлементное умножение:

c= a*b

array( [  [4, 10],  [18, 28] ])
В python numpy умножение матриц  осуществляется c применением оператора dot:

a.dot(b)

В результате перемножения матриц получаем:

array([ [16, 19],  [36, 43] ])

Как и в других языках программирования, в numpy операции с матрицами, такие как + = и * =, заменяют элементы в текущей, а не создают новый экземпляр. Многие унарные операции, к примеру сумма всех элементов массива, можно выполнить при помощи методов класса ndarray:

a = np.array([0,1,2])

a.sum()

Получаем число 3. Другой метод python numpy min — осуществляет поиск минимального значения, max — максимального, sort — сортирует по возрастанию и т.д. С полным списком методов можно ознакомиться, перейдя по ссылке.

Также в numpy есть знакомые математические функции, такие как sin, cos и exp, здесь они называются универсальными функциями (ufunc):
np.exp(a)

Получаем:
array([ 1. ,  2.71828183,  7.3890561 ])

Описанное — очень малая часть реальных возможностей библиотеки numpy python 3. Если вас заинтересовала эта информация, на официальном ресурсе вы сможете найти ещё много документов, примеров, туториалов. В дальнейшем мы ещё поговорим о развитии этой библиотеки, с уклоном на науку — SciPy.

Новые комментарии