NumPy - основной пакет для численного вычисления. Он определяет численные типы массивов и матриц и основные операции над ними.
SciPy - набор числовых алгоритмов и наборов инструментов, специфичных для домена, включая обработку сигналов, оптимизацию, статистику и многое другое.
Matplotlib - обеспечивает возможность рисования графиков.
pandas - обеспечивая высокопроизводительные и простые в использовании структуры данных.
SymPy - для символьной математики и компьютерной алгебры.
% matplotlib inline
import sympy as sympy
import numpy as np
import matplotlib.pyplot as plt
from scipy import *
Набор функций и методов для работы с массивами в numpy https://docs.scipy.org/doc/numpy/reference/routines.html
Манипуляции с массивами https://docs.scipy.org/doc/numpy/reference/routines.array-manipulation.html
N-dimensional array (ndarray) https://docs.scipy.org/doc/numpy/reference/arrays.ndarray.html
# создание массива из списка
A = np.array([[1, 2, 3], [4, 5, 6]], np.int32)
A
len(set(dir(A))- set(dir(object)))
#help(A)
# атрибуты
A.ndim
A.shape
# A.shape=1,6
len(A)
A.size
# обращение к элементу (см. lecture_2)
A[0,1]
https://docs.scipy.org/doc/numpy/reference/generated/numpy.matrix.html#numpy.matrix
Объект matrix имеет специальные операторы * (матричное умножение) и **(мощность матрицы)
См. сравнение numpy.matrix vs 2D numpy.ndarray https://docs.scipy.org/doc/scipy/reference/tutorial/linalg.html#numpy-matrix-vs-2d-numpy-ndarray
B=np.matrix([[1, 2], [3, 4]])
type(B)
B
B.A
B.A1
# сложение (вычитание) матрицы и скаляра (поэлементное)
A+1
B+2
# сложение (вычитание) матриц
A+B
A[0:2, 0:2]+B
# матрицы
A.T
# вектора
C=np.array([1,1,1])
C.T
C.reshape(3,1)
D=np.matrix([1,1])
D.T
A
# поэлементное умножение матриц
A*A
# умножение на скаляр (поэлементное)
A*3
# умножение матрицы A на матрицу C
# 1
A.dot(C)
# 2
np.dot(A, C)
# 3
A@C
D
B*D
# транспонирование вектора D
B*np.reshape(D, (2,1))
# транспонирование вектора D
B*D.T
E=np.eye(2)
E
# matrix * array (не поэлементно)
B*E
A[1]
B[1]
# цикл по строке
for row in A:
print(row)
# столбец
A[:,2]
B[:,1]
# cумма всех элементов; суммы столбцов; суммы строк.
print(A.sum())
print(A.sum(0))
print(A.sum(1))
A
# произведение элементов,
print(A.prod())
print(A.max(0))
print(A.min(1))
# след матрицы - сумма диагональных элементов
trace(E)
https://docs.scipy.org/doc/scipy/reference/tutorial/linalg.html
scipy.linalg содержит все функции в numpy.linalg. плюс некоторые другие более продвинутые, не содержащиеся в numpy.linalg
from scipy import linalg
np.linalg.det(E)
B
B_inverse=np.linalg.inv(B)
B_inverse
# проверка
B_inverse.dot(B)
B.dot(B_inverse)
A=np.array([[0.0,1.0],[-1.0,0.0]])
A
v=np.array([2,2])
v
np.linalg.inv(A)@v
x=solve(A,v)
x
# проверка
A@x-v
https://docs.scipy.org/doc/scipy/reference/tutorial/linalg.html#eigenvalues-and-eigenvectors
Набор методов numpy.linalg https://docs.scipy.org/doc/numpy/reference/routines.linalg.html
A
vals=np.linalg.eigvals(A)
vals
vals,vectors=np.linalg.eig(A)
vals
vectors
from numpy.linalg import *
l,vec=eig(A)
l
vec
# собственный вектор v_1 - нулевой столбец матрицы vec
vec[:,0]
# собственный вектор v_2 - первый столбец матрицы vec
vec[:,1]
# проверка для v_1
A.dot(vec[:,0])-l[0]*vec[:,0]
# проверка для v_2
A.dot(vec[:,1])-l[1]*vec[:,1]
# проверка с помощью диагональной матрицы (собственные числа по гл. диагонали)
# Av=vD, D=diag(l_1, l_2)
D=diag(l)
D
# 1. проверка
A.dot(vec)-vec.dot(D)
# 2 проверка
inv(vec)@A@vec