Основной операцией линейной алгебры является умножением матриц (как частный случай, матрицы на вектор и вектор на вектор). При использовании объектов ndarray и matrix в NumPy синтаксис умножение матриц разный. В случае ndarray символ * соответствует поэлементному умножению, для умножения матриц используется функция dot О. В случае matrix символ * применяется для умножения матриц и функция multiply О для поэлементного умножения.
import numpy as np
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
print ’ndarray - a*b:\n’, a*b
print ’ndarray - dot(a,b):\n’, np.dot(a, b)
c = np.mat(a)
d = np.mat(b)
print ’matrix - c*d:\n’, c*d
print ’matrix - multiply(a,b):\n’, np.multiply(c, d)
В этом примере используется функция mat О для преобразования объектов ndarray в matrix. Ее можно использовать при инициализации матриц с помо. щыо функций типа zeros О, ones О, еуе(), linspaceO для задания масси-* вов.
При работе с массивами удобно использовать атрибут .Т для получения транспонированной матрицы (замена строк на столбцы исходной матрицы). Для матричных объектов используется также следующие атрибуты:
.Н — транспонирование с комплексным сопряжением;
. I — обратная матрица;
.А — преобразование матрицы в двумерный массив, import numpy as np
a = np.mat(np.linspace(1, 4, 4).reshape(2,2)) print ’linspace - reshape -> a:\n’, a print ’a: type(a)
b = a.I
print ’а.ТЛп’, a.T print ,a.I:\n>, b print ’а+аЛЛп’, a*b print ’a. A: type(a.A)
a < с 1 a s s-’humpy- ix::д й • дд:д;
I
ЙёШЩёЩШ®1М
За описаниями других функций для работы над матрицами и массивами (над ndarray в matrix) мы отсылаем к документации по пакету NumPy.
Линейная алгебра
В пакете NumPy реализованы базовые операции линейной алгебры (модуль linalg). Упомянем вначале функции для вычисления характеристик матрицы. Для вычисления нормы вектора (например, евклидовой) и нормы квадратной матрицы (например, Фробениуса) привлекается функция norm(). Для вычисления числа обусловленности квадратной матрицы используется cond(), определителя — det(), а для следа матрицы — trace() из пакета NumPy.
import numpy as np a = np.mat( [[1, 2], [3, 4]]) print ’a:\n’, a
print ’norm a: ’, np.linalg.norm(a) print ’cond a: ’, np.linalg.cond(a) print ’det a: ’, np.linalg.det(a) print ’trace a: ’, np.trace(a)
кпганннш^и
III!
В модуле линейной алгебры имеются функции разложения матрицы на множители. Для симметричной положительно определенной матрицы А имеет место разложение Холецкого, когда A = LL*, где L — нижнетреугольная матрица (функция choleskyO). Для общих матриц используется QR-разложе- ние, когда А = QR, где Q — ортогональная матрица, a R— верхнетреугольная матрица (функция qr()). Сингулярное разложение матрицы проводится функцией svd().
import numpy as np a = np. mat ([ [2, 1], [3, 4]]) b = (a + a.T) / 2 print ’a:\n’, a print ’a:\n’, b
print ’lower-triangular (Cholesky) matrix:\n’, np.linalg.cholesky(b)
q, r = np.linalg.qr(a)
print ’orthonormal matrix q: \n’, q
print ’upper-triangular matrix r: \n’, r
print ’q*r: \n’, q*r
a : -.Й;.; i ^ ШйШ :• /И . : i: ^ ^Щ •> ; Wt Щ :i'
l2 4)i . . .
Do'stlaringiz bilan baham: |