Перейти к содержанию

NumPy

Библиотека добавляющая массивы и разные математические функции. Здесь находится краткое описание методов и функций со сниппетами.

Массивы

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

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

Заполнение

Для создания и заполнения массива можно воспользоваться четырьмя функциями:

  1. np.zeros - создаст массив из нулей.
  2. np.ones - создаст массив из единиц.
  3. np.arange - создаст массив из диапазона от нуля до N.
  4. np.full - создаст массив из заданного элемента.

Арифметические операции

Арифметические операции, с массивом можно проводить указав конструкцию вида arr operator N - операция проведется на каждом элемент массива.

Например, arr * 2 - умножит каждый элемент массива 2.

Альтернативный формат индексации

  1. Запись arr[1, 1] для массива NumPy будет эквивалентна записи arr[1][1].

Индексация по булевой маске

Индексация по маске позволяет получать элементы из массива, который подходят под неё:

# Определяем тестовые данные
arr = np.array([1, 2, 3, 4, 5, 6])
# Определяем маску: хотим получить 2 и 6
mask = [False, True, False, False, False, True]
# получаем
arr[mask] # (2, 6)

Важно: получая данные по маске мы создаем новый массив, а не получаем ссылку на данные.

Слайс всего лишь ссылка на данные в массиве

Допустим, есть следующий код

m1 = np.arange(10)
data = m1[0:5]
data[0] = 10
print(m1) # [10  1  2  3  4  5  6  7  8  9], хотя ожидали список от 0 до 9
print(data), # [10, 1, 2, 3, 4]

При получении m1 после создания слайса data и его изменения, разработчик работавший со списками предполагает, что при создании слайса мы создали новый список. Но в numpy при создании слайса мы получаем ссылку на часть данных в массиве.

Чтобы данные действительно скопировались, после создания слайса надо вызвать copy():

m1 = np.arange(10)
data = m1[0:5].copy()
data[0] = 10
print(m1) # [0 1 2 3 4 5 6 7 8 9]
print(data), [10 1 2 3 4]

Ссылки