gpt4 book ai didi

python - Python 中存储在数组中的矩阵相乘

转载 作者:太空宇宙 更新时间:2023-11-03 19:01:54 25 4
gpt4 key购买 nike

这可能看起来是一个愚蠢的问题,但我是 Python(以及编程)的新手。我正在运行一个物理模拟,其中涉及许多(~10 000)2x2 矩阵,我将它们存储在数组中。我在下面的代码中将这些矩阵称为 M ,将数组称为 T 。然后我只想计算所有这些矩阵的乘积。这是我想出的,但它看起来很丑,而且对于 10000+ 2x2 矩阵来说工作量很大。有没有更简单的方法或我可以使用的内置函数?

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]))))

最佳答案

不太 NumPythonic,但你可以这样做:

reduce(lambda x,y: np.dot(x,y), T, np.eye(2))

或者按照建议更简洁

reduce(np.dot, T, np.eye(2))

关于python - Python 中存储在数组中的矩阵相乘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15815573/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com