Python 提高循环速度

Python 提高循环速度,python,performance,loops,Python,Performance,Loops,我有一百万个循环要做。有没有办法更快地处理这个(以及一般的python循环) 通常有两种方法可以加快循环速度: 让你在循环中做的事情更快,这样计算机就可以做更少的工作来达到同样的结果。这只有在您能够发现代码中的低效并修复它们的情况下才有效 同时运行多个循环(即,不是1个线程执行1M任务,而是4个线程分别执行250k任务)。只有当您有多个处理器可以并行执行工作,并且您正在执行的工作不需要在其持续时间内独占使用共享资源(如磁盘)时,此功能才有效 用numpy数组操作替换python循环通常有助于提高

我有一百万个循环要做。有没有办法更快地处理这个(以及一般的python循环)


通常有两种方法可以加快循环速度:

  • 让你在循环中做的事情更快,这样计算机就可以做更少的工作来达到同样的结果。这只有在您能够发现代码中的低效并修复它们的情况下才有效
  • 同时运行多个循环(即,不是1个线程执行1M任务,而是4个线程分别执行250k任务)。只有当您有多个处理器可以并行执行工作,并且您正在执行的工作不需要在其持续时间内独占使用共享资源(如磁盘)时,此功能才有效

  • 用numpy数组操作替换python循环通常有助于提高性能

    在你的例子中,你有效地做到了

    pop = 100  # for example
    
    for i in range(pop):
        pop += np.random.choice(5, p=reproductionDistM)
    
    在每次迭代中

    所有采样和求和都可以在numpy中完成,无需循环:

    pop = 100
    pop += np.random.choice(5, p=reproductionDistM, size=pop).sum()
    
    在我的机器上,这提供了很大的加速(多少取决于
    pop
    的值,例如大约100)

    另一方面,如果阵列很大,这可能会浪费大量RAM。在这种情况下,我经常发现通过批量使用numpy来平衡速度和RAM是可行的

    pop = 100
    pop += np.random.choice(5, p=reproductionDistM, size=pop).sum()