在Python中加速/矢量化嵌套循环

时间:2018-06-03 21:20:18

标签: python loops nested

我已经实现了一个Python脚本,我需要使用4个嵌套循环。我意识到它使解决方案非常缓慢。我也注意到Matlab中的类似循环要比Python快得多。

1)为什么Matlab中的循环比Python中更快?

2)如何改进我的Python代码(例如矢量化)?我已经尝试过itertools(组合,产品)的功能,但是他们不能更快地进行计算。

我创建了一类点 - 每个点都有坐标和速度,我计算它们与其他数量之间的距离

N = 1000
for i in range(0,N-1):
    for i2 in range(0,10):
        if p[i].id[i2] == 1:    # check if point is active
            ri = p[i].r[i2]
            vi = p[i].v
        else:
            pass

        for j in range(i+1,N):
            for j2 in range(0,10):
                if p[j].id[j2] == 1:
                    rj = p[j].r[j2]
                    vj = p[j].v
                else:
                    pass

#            and the rest of my function

有人可以帮助我吗?

非常感谢!

1 个答案:

答案 0 :(得分:0)

关于Python与Matlab的性能,我建议看一下 http://wiki.scipy.org/PerformancePython。显然速度与需要解决的问题有关,但我想象纯粹的数学/物理计算和模拟Matlab将占上风(当然,是为这些目的而设计的)。

关于你的代码,Python确实有各种各样的工具可用来提高性能,例如使用生成器,或者,对于数学应用程序,Numpy(用C语言提供)ndarrays。如果你认真对待高性能python,你可能还想看看PyPy或Cython。

我还记得在某处(如果找到链接会更新)只是通过使用函数调用和python类,代码执行速度大大加快,因为字节码可以更有效地解释。

我还会指出您的回复https://stackoverflow.com/a/16752469/9889462作为使用生成器加速代码的启动器。希望这有帮助