我有一个维度为A
的矩阵1024 * 307200
和另一个维度B
的矩阵1024 * 50
。我在嵌套for循环中对这两个矩阵执行L2_norm
,以使我的最终矩阵C
为307200 * 50
。
您可以在下面找到以下代码:
for i in range(307200):
for l in range(50):
C[i,l] = numpy.linalg.norm(A[:,i] - B[:,l]))
正如您所看到的,我的变量的维度很大,导致了非常高的延迟。我想避免这个嵌套循环,因为对于i
和l
的每个值,我使用相同的函数。
有没有办法优化上述循环?
答案 0 :(得分:3)
也许你可以用这些矩阵运算替换内循环和函数?
for i in range(307200):
temp = A[:,i,np.newaxis] - B[:]
C[i,:] = np.linalg.norm(temp, axis=0)
对于较小的阵列,我的运行时间减少了约20倍。也许你获得更多。在任何情况下,请确保您获得了良好的结果(在较小的集合上)。