首页 > 解决方案 > 如何加快第二个循环依赖于第一个循环的嵌套循环?

问题描述

考虑以下代码:

n = 20000


def f(i, j):

    return (i+1j*j)/(i-1j*j+1)  # a sample function, not necessary this form


lst = []
for i in range(n):
    for j in range(i, n):
        lst.append((i, j, f(i, j)))

由于循环非常大,我想对其进行矢量化或加速。阅读其他帖子,似乎itertools.product可以加快循环,但在我的情况下,第二个循环取决于第一个,似乎我不能简单地使用它。那么如何加快速度呢?

例如,我可以使用 4 个处理器。

标签: pythonpython-3.xnumpyloopsparallel-processing

解决方案


一般来说,你可以这样做np.triu_indices

i, j = np.triu_indices(n)
np.stack([i, j, f(i, j)])

这可能会阻塞您的系统(因为i每个j都有 200M 个元素n = 20000),在这种情况下您需要itertools


推荐阅读