【发布时间】:2021-05-26 21:04:00
【问题描述】:
考虑以下代码:
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 个处理器。
【问题讨论】:
-
itertools.product并没有真正加快循环速度。它提供了一种将嵌套循环编写为单个循环的便捷方法。如果你不能向量化你的函数,你最好的办法是使用numba。 -
一个建议:不要动态增长列表。见:stackoverflow.com/questions/2473783/…
-
顺便说一下,
itertools.combinations有点相当于你的双循环,而不是itertools.product。 -
@QuangHoang 一般如何向量化函数?
-
@anoffercan'trefuse 这个问题太难了。大多数人会说不可能。你必须知道你的功能是做什么的。即便如此,如果可能的话,矢量化可能也不是微不足道的。
标签: python python-3.x numpy loops parallel-processing