将20个相同的6x6矩阵(M)相乘最有效(最快)的方法是什么?你知道吗
N = 20
w = sy.Symbol("w");v = sy.Symbol("v");p = sy.Symbol("p");q = sy.Symbol("q");c = 1;n = 1;nc = 1
M = np.array([[w*p*q,w*q,0,0,0,0],
[0,0,v,0,0,0],
[0,0,0,nc,0,c],
[0,0,0,0,v,0],
[w,w,v,nc,0,c],
[0,0,0,n,0,1]])
Mi = np.array([[w*p*q,w*q,0,0,0,0],
[0,0,v,0,0,0],
[0,0,0,nc,0,c],
[0,0,0,0,v,0],
[w,w,v,nc,0,c],
[0,0,0,n,0,1]])
for l in range(N-1):
M = np.dot(M, Mi)
difZ = sy.diff(Z2,w)
expr = w*(np.divide(difZ,Z2))
Z_lamda = sy.lambdify([w,v,p,q], expr, "numpy")
对于您的特殊用例,我建议使用^{} (链接问题中没有提到)。你知道吗
时间安排
以下是我使用的设置代码:
下面是一些时间安排,将您最初的迭代
dot
方法与matrix_power
方法进行比较:所以
matrix_power
大约快80倍。你知道吗额外的好处:
matrix_power
在Sympy表达式数组中工作得更好不管出于什么原因,
matrix_power
似乎比迭代dot
方法更适合于symphy。结果数组中的表达式将更加简化,只需较少的项。下面是如何计算结果数组中的项:输出:
特别是,
print(Mpow)
比print(M)
运行得快得多。你知道吗相关问题 更多 >
编程相关推荐