Основные операции линейной алгебры в numpy

Операции над векторами

Положим что одномерные массивы a и b являются векторами в трехмерном пространстве:

import numpy as np

a = np.array([1,1,1])
b = np.array([2,-1,3])
Операция Запись Результат
Длина вектора np.linalg.norm(a) 1.7320508075688772
Произведение вектора на скаляр 2*a array([2, 2, 2])
Сумма векторов a + b array([3, 0, 4])
Скалярное произведение np.dot(a,b) 4
Векторное произведение np.cross(a,b) array([ 4, -1, -3])

Операции над матрицами

Положим, что a — вектор, а M — матрица в трехмерном пространстве.

import numpy as np

a = np.array([1,1,1])
M = np.array([[1,0,1],[2,1,-1],[-1,0,-3]])
Операция Запись Результат
Определитель np.linalg.det(M) -2.0
След np.trace(M) -1
Форма M.shape (3, 3)
Векторно-матричное умножение np.matmul(a, M) array([ 2, 1, -3])
Матричное умножение np.matmul(M,M) array([[ 0, 0, -2], [ 5, 1, 4], [ 2, 0, 8]])
Обратная матрица np.linalg.inv(M) array([[ 1.5, 0. , 0.5], [-3.5, 1. , -1.5], [-0.5, 0. , -0.5]])
Собственные числа и собственные векторы np.linalg.eig(M) (array([ 1. , 0.73205081, -2.73205081]), array([[ 0. , 0.11727205, -0.2405126 ], [ 1. , -0.99260257, 0.36940291], [ 0. , -0.03142295, 0.89760524]]))
Транспонирование M.T array([[ 1, 2, -1], [ 0, 1, 0], [ 1, -1, -3]])
Нулевая матрица np.zeros((3,3)) array([[0., 0., 0.], [0., 0., 0.], [0., 0., 0.]])
Единичная матрица np.eye(3) array([[1., 0., 0.], [0., 1., 0.], [0., 0., 1.]])
Удаление измерений состоящих из одного элемента np.squeeze(np.array([[[1,2,3]]])) array([1., 2., 3.])

Вращение координат

Вращение координат удобно задавать в виде матрицы поворота с помощью модуля scipy.spatial.transform

from scipy.spatial.transform import Rotation

#Вращение на 90 градусов вокруг оси X
MRot = Rotation.from_euler('x', [np.pi/2]).as_matrix()

a = np.array([1,1,1])

rot_a = np.squeeze(np.matmul(a, MRot))

Способы задания вращения

Способ задания Описание Пример
Углы Эйлера Последовательность вращений вокруг осей координат Rotation.from_euler('xy', [np.pi/2, -np.pi/6])
Матрица поворота Матрица направляющих косинусов Rotation.from_matrix([[0,0,0],[0,0,0],[0,0,1]])
Вращение вокруг вектора Вращение вокруг вектора единичной длинны на данный угол v = np.array([1, 0, 1]); Rotation.from_rotvec(np.pi/2 * v/np.linalg.norm(v))
Кватернион Запись вращения в форме кватерниона (x, y, z, w) Rotation.from_quat([0. , 0. , 0.70710678, 0.70710678])

Библиотека scipy.spatial.transform также позволяет преобразовывать одно представление вращения в другое методами to_euler, to_matrix, to_rotvec, to_quat.