Нашли ошибку?
базовыйNumPy 2.5.3

Что такое NumPy

Библиотека для быстрых вычислений над массивами чисел — основа pandas, scikit-learn и почти всего научного Python.

Содержание статьи

Коротко

  • Главный объект — 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 каждый раз создаёт новый массив и копирует данные. В цикле это медленно — собирайте значения в список и превращайте в массив один раз в конце.

np.append возвращает копию
scores = np.array([4, 5])
more = np.append(scores, 3)      # новый массив, исходный не меняется
print(scores)
more
Вывод
[4 5]
array([4, 5, 3])