如何在python中加速此代码?
while ( norm_corr > corr_len ):
correlation = 0.0
for i in xrange(6):
for j in xrange(6):
correlation += (p[i] * T_n[j][i]) * ((F[j] - Fbar) * (F[i] - Fbar))
Integral += correlation
T_n =np.mat(T_n) * np.mat(TT)
T_n = T_n.tolist()
norm_corr = correlation / variance
这里,TT是固定的6×6矩阵,p是固定的1×6矩阵,F是固定的1×6矩阵。 T_n是TT的n次幂。
这个while循环可能会重复10 ^ 4次。
答案 0 :(得分:0)
快速完成这些操作的方法是使用Numpy的内置函数和运算符来执行操作。 Numpy在内部使用优化的C代码实现,如果正确设置计算,它将运行得更快。
但有效地利用Numpy有时候会很棘手。它被称为"矢量化"你的代码 - 你必须弄清楚如何以一种作用于整个数组的方式来表达它,而不是使用显式循环。
例如在你的循环中你有p[i] * T_n[j][i]
,可以用逐个矩阵的乘法来完成IMHO:如果v是1x6而m是6x6那么v.dot(m)
是1x6来计算点积v
的{{1}}列。m
。如有必要,您可以使用转置和重塑以不同的维度工作。