NumPy¶
Библиотека добавляющая массивы и разные математические функции. Здесь находится краткое описание методов и функций со сниппетами.
Массивы¶
Массивы из NumPy работают намного быстрее, чем обычные списки, к тому же они потребляют намного меньше памяти.
Это связано с тем, что массив допускает элементы только одного типа, а элементы в памяти располагаются рядом.
Заполнение¶
Для создания и заполнения массива можно воспользоваться четырьмя функциями:
np.zeros
- создаст массив из нулей.np.ones
- создаст массив из единиц.np.arange
- создаст массив из диапазона от нуля до N.np.full
- создаст массив из заданного элемента.
Арифметические операции¶
Арифметические операции, с массивом можно проводить указав конструкцию вида arr operator N
- операция проведется на каждом элемент массива.
Например, arr * 2
- умножит каждый элемент массива 2.
Альтернативный формат индексации¶
- Запись
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]