加速python中的嵌套循环

时间:2016-10-12 20:30:28

标签: python performance loops

如何在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次。

1 个答案:

答案 0 :(得分:0)

快速完成这些操作的方法是使用Numpy的内置函数和运算符来执行操作。 Numpy在内部使用优化的C代码实现,如果正确设置计算,它将运行得更快。

但有效地利用Numpy有时候会很棘手。它被称为"矢量化"你的代码 - 你必须弄清楚如何以一种作用于整个数组的方式来表达它,而不是使用显式循环。

例如在你的循环中你有p[i] * T_n[j][i],可以用逐个矩阵的乘法来完成IMHO:如果v是1x6而m是6x6那么v.dot(m)是1x6来计算点积v的{​​{1}}列。m。如有必要,您可以使用转置和重塑以不同的维度工作。