python - 避免在 Python 中嵌套 for 循环

标签 python numpy matrix nested-loops

我有一个维度为 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]))      

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

有什么办法可以优化上面的循环吗?

最佳答案

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

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/

相关文章:

python - 忽略一个最小值和一个最大值的数组总和

python - 如果pickle文件中不存在对象,则创建新对象,如果存在则加载它(多个对象的最佳方法?)

python - 将大型稀疏矩阵转换为 COO 时出错

python - 我如何使用 Python Pandas "merge/add"2 个具有相同列和行的混淆矩阵数据帧?

python - 优化执行时间以检查单词的字符是否在Python列表中

python - 通过python算法将Square Hald clut转换为Classic Hald clut

python - 使用 numpy 和 lstsq 求解 3 维系统

matlab - 向量化二元运算的串联

java - 以矩阵格式打印二维数组

python - iPython timeit - 仅时间部分操作