NumPy¶
Создание Numpy массивов¶
import numpy as np
a = np.array([1,2,3], float) # Однмемерный массив из списка
b = np.repeat(-1. ,10) # Массив полученные повоторением исходного объекта
c = np.zeros((3, 5)) # Матрица из нулей размера 3х5
d = np.ones((2, 2, 2)) # Трехмерный массив из единиц
e = np.eye(5) # Единичная матрица
print(a, b, c, d, e, sep='\n\n')
print(c.shape) # Возвращает размерность массива, для двумерного это количество строк и столбцов
Арифметические операции с массивами и векторизация¶
Полезной особенностью numpy-массивов является так называемая векторизация --- возможность делать быстрые поэлементные операции с массивами без использования цикла for
.
a = np.array([1,2,3], float)
b = np.array([5,2,6], float)
print(a + b)
print(a - b)
print(a * b)
print(b / a)
print(a % b)
print(b ** a)
print(np.sqrt(a))
print(np.sum(a))
print(np.prod(b))
print(a.dot(b)) # Скалярное произведение
print(a > b)
print(np.where(a != 2, 1 / a, a))
Линейная алгебра¶
NumPy также предоставляет набор встроенных функций и методов для работы с линейной алгеброй. Это всё можно найти в под-модуле linalg
.
a = np.array([[4, 2, 0], [9, 3, 7], [1, 2, 1]], float)
b = a.T # Транспонированый массив
print(np.linalg.det(a)) # Ищем детерминант
vals, vecs = np.linalg.eig(a)
print(vals)
print(vecs)
Операции с индексами¶
Оперативная память компьютера линейна, и поэтому даже многомерные массивы, на самом деле являются некоторыми линейными структурами, над которыми существуют система индексов, говорящих как именно читать этот линейный блок. Проведение операций над индексами в большистве случаев эффективно и поэтому операции смены размерности массива или транспонирования выполняются быстро
a = np.asarray([[1,2], [3,4]])
b = a.T # Транспонированый массив
print(b)
b[0,0] = 10
print(b)
print(a)
Как мы видим при изменени переменной b
изменилась переменная a
. Это произошло потому, что обе эти переменные использубют один и тот же кусок памяти, но по разному
Чтение даных¶
Numpy также предоставляет функционал для чтения данных, который бывает весьма полезен
data = np.loadtxt('./data/data.txt')
data