Коротко
- Главный объект — ndarray: многомерный массив элементов одного типа фиксированного размера.
- Операции применяются сразу ко всему массиву (векторизация): цикл выполняется внутри NumPy на C, поэтому это в десятки раз быстрее цикла Python.
- Принято импортировать так:
import numpy as np. Во всех примерах справочникаnpуже импортирован. - Арифметика со списком и с массивом работает по-разному:
+у списков склеивает, у массивов складывает поэлементно. - Примеры показаны в стиле Jupyter: под кодом — вывод
printи значение последней строки. В.py-файле оберните последнюю строку вprint().
Синтаксис
import numpy as np
a = np.array([1, 2, 3]) # из списка
a * 2, a + a, a ** 2 # поэлементные операции
np.__version__ # версияПримеры
print([1, 2, 3] * 2) # список: повторение
np.array([1, 2, 3]) * 2 # массив: умножение каждого элементаВывод
[1, 2, 3, 1, 2, 3] array([2, 4, 6])
celsius = np.array([-5.0, 0.0, 12.5, 30.0])
celsius * 9 / 5 + 32 # формула сразу для всех значений, без циклаВывод
array([23. , 32. , 54.5, 86. ])
table = np.array([[1, 2, 3],
[4, 5, 6]])
print(table.shape)
table + 10Вывод
(2, 3)
array([[11, 12, 13],
[14, 15, 16]])np.__version__Вывод
'2.5.3'
Справочник написан для NumPy 2.5. Код для NumPy 1.x из старых статей в основном работает, отличия отмечены в статьях пометкой «Изменилось».
Подводные камни
Разнородные данные молча приводятся к одному типу
Одно дробное число превращает все элементы в float, одна строка — в строки. После этого арифметика либо даёт неожиданный тип, либо падает. Подробнее — в типах данных.
print(np.array([1, 2.5, 3])) # целые стали float
np.array([1, "два", 3]) # всё превратилось в строкиВывод
[1. 2.5 3. ] array(['1', 'два', '3'], dtype='<U21')
Массив не растёт как список
У массива фиксированный размер: np.append каждый раз создаёт новый массив и копирует данные. В цикле это медленно — собирайте значения в список и превращайте в массив один раз в конце.
scores = np.array([4, 5])
more = np.append(scores, 3) # новый массив, исходный не меняется
print(scores)
moreВывод
[4 5] array([4, 5, 3])