Основные операции линейной алгебры в 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
.
calc/linal.txt · Последнее изменение: 2022/08/10 23:52 — root
Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution-Share Alike 4.0 International