Получить матричное произведение 3-х матриц

У меня есть 3 матрицы 3X3, хранящиеся в массивах numpy. Я хочу получить продукт, чтобы вычислить матрицу вращения.

В настоящее время я делаю rotation_matrix = (a * b * c), но я не знаю, правильный ли это способ умножения матриц - должен ли я использовать .dot Я также пробовал с rotation_matrix = pre_rotation.dot(result_pre_tilt).dot(post_rotation)

и rotation_matrix = np.multiply(result_pre_tilt, pre_rotation, post_rotation)

a = np.array(
[[-0.25091924  0.         -0.        ]
[-0.         -0.35485339  0.        ]
[ 0.          0.          0.70710678]])

b = np.array(
[[ 0.10040533 -0.          0.        ]
[ 0.          0.28953198 -0.        ]
[ 0.          0.          0.31056766]])

c = np.array(
[[  6.12323400e-17   0.00000000e+00  -1.00000000e+00]
[  0.00000000e+00   1.00000000e+00   0.00000000e+00]
[  1.00000000e+00   0.00000000e+00   6.12323400e-17]])

person bhreathn711    schedule 14.07.2016    source источник
comment
docs.scipy.org/doc/numpy/reference/generated/   -  person Gábor Erdős    schedule 14.07.2016
comment
Дает ли это правильный результат? Пример может помочь. 3D matrices может быть двусмысленным. Форма 3х3 или 2х3х4? Или что-то другое.   -  person hpaulj    schedule 14.07.2016
comment
Трехмерные матрицы, хранящиеся в пустых массивах Какого они типа, matrix или ndarray? (Отметьте type(a).) Если это matrix объекты, то да, * — это умножение матриц. Если они являются numpy.ndarray объектами, то * является поэлементным умножением. Для умножения матриц в этом случае используйте метод dot: rotation_matrix = a.dot(b).dot(c). (Вы также можете использовать dot с matrix объектами.)   -  person Warren Weckesser    schedule 14.07.2016
comment
@WarrenWeckesser Я обновил вопрос, чтобы сделать его более понятным.   -  person bhreathn711    schedule 14.07.2016
comment
Это обычные массивы numpy, а не объекты matrix. Используйте метод dot (или, если вы используете блестящие новые версии Python и numpy, используйте @: rotation_matrix = a @ b @ c).   -  person Warren Weckesser    schedule 14.07.2016


Ответы (1)


Вы можете попробовать использовать dot следующим образом:

final= numpy.dot(tilt_matrix, (numpy.dot(rotation_matrix, original))

Что следует учитывать:

  1. numpy.dot — это функция, а не метод (невозможно вызвать A.dot(B), вместо этого вызовите np.dot(A, B));
  2. Порядок имеет значение — если вы не получаете правильный результат, попробуйте изменить порядок. Иногда нужно сначала перевести, а потом повернуть, иногда наоборот. Зависит от каждого случая;
  3. Номер столбца левой матрицы должен быть того же размера, что и номер строки правой матрицы для двумерных матриц.
person heltonbiker    schedule 14.07.2016
comment
Если A представляет собой пустой массив, A.dot(B) совпадает с np.dot(A,B). - person hpaulj; 14.07.2016