避免在Python中嵌套for循环

时间:2018-03-04 09:45:03

标签: python numpy matrix nested-loops

我有一个维度为A的矩阵1024 * 307200和另一个维度B的矩阵1024 * 50。我在嵌套for循环中对这两个矩阵执行L2_norm,以使我的最终矩阵C307200 * 50
您可以在下面找到以下代码:

    for i in range(307200):
        for l in range(50):
            C[i,l] =  numpy.linalg.norm(A[:,i] - B[:,l]))      

正如您所看到的,我的变量的维度很大,导致了非常高的延迟。我想避免这个嵌套循环,因为对于il的每个值,我使用相同的函数。

有没有办法优化上述循环?

1 个答案:

答案 0 :(得分:3)

也许你可以用这些矩阵运算替换内循环和函数?

for i in range(307200):
    temp = A[:,i,np.newaxis] - B[:]
    C[i,:] = np.linalg.norm(temp, axis=0)

对于较小的阵列,我的运行时间减少了约20倍。也许你获得更多。在任何情况下,请确保您获得了良好的结果(在较小的集合上)。