Это может показаться глупым вопросом, но я чертовски новичок в Python (и в программировании). Я использую физическое моделирование, которое включает в себя множество (~ 10 000) 2x2-матриц, которые я храню в массиве. Я называю эти матрицы M и массив T в коде ниже. Тогда я просто хочу вычислить произведение всех этих матриц. Это то, что я придумал, но он выглядит уродливым, и это будет так много работы для 10000 + 2x2 матриц. Есть ли более простой способ или встроенная функция, которую я мог бы использовать?Умножающиеся матрицы, которые хранятся в массиве в Python
import numpy as np
#build matrix M (dont read it, just an example, doesnt matter here)
def M(k1 , k2 , x):
a = (k1 + k2) * np.exp(1j * (k2-k1) * x)
b = (k1 - k2) * np.exp(-1j * (k1 + k2) * x)
c = (k1 - k2) * np.exp(1j * (k2 + k1) * x)
d = (k1 + k2) * np.exp(-1j * (k2 - k1) * x)
M = np.array([[a , b] , [c , d]])
M *= 1./(2. * k1)
return M
#array of test matrices T
T = np.array([M(1,2,3), M(3,3,3), M(54,3,9), M(33,11,42) ,M(12,9,5)])
#compute the matrix product of T[0] * T[1] *... * T[4]
#I originally had this line of code, which is wrong, as pointed out in the comments
#np.dot(T[0],np.dot(T[1], np.dot(T[2], np.dot(T[2],np.dot(T[3],T[4])))))
#it should be:
np.dot(T[0], np.dot(T[1], np.dot(T[2],np.dot(T[3],T[4]))))
ли матрицы всегда 'я * M' для' i' от 1 до какого-то числа? –
нет, они действительно сложны. Я на самом деле планирую их вычислять на ходу в цикле for, если я могу понять, как это сделать. следует ли изменить это в моем фрагменте кода? может быть, это сбивает с толку. – seb
Есть ли причина для размещения матриц в массиве? Я думаю, что я, вероятно, просто поместил бы их в список ... – mgilson