====== Основные операции линейной алгебры в 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''.