Библиотека Numpy
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.