我有一个维度为 1024 * 307200
的矩阵 A
和维度为 1024 * 50
的另一个矩阵 B
>。我在嵌套的 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
的每个值,我都使用相同的函数。
有什么办法可以优化上面的循环吗?
最佳答案
也许您可以用这些矩阵运算替换内部循环和您的函数?
for i in range(307200):
temp = A[:,i,np.newaxis] - B[:]
C[i,:] = np.linalg.norm(temp, axis=0)
对于较小的阵列,我的运行时间缩短了大约 20 倍。或许你收获更多。无论如何,请确保您收到好的结果(在较小的设备上)。
关于python - 避免在 Python 中嵌套 for 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49094026/