我正在尝试使用Python的itertools模块来加速一个三重嵌套的for循环。下面的测试代码将标准的三重嵌套循环与itertools的product方法和输出进行了比较:
嵌套循环时间= 2.35023秒
Itertools循环时间= 2.67766秒
我是不是遗漏了什么?
import numpy
import itertools
import time
n = 128
a = numpy.arange(n**3).reshape((n,n,n))
b = numpy.zeros((n,n,n))
c = numpy.zeros((n,n,n))
t = time.time()
for i in range(n):
for j in range(n):
for k in range(n):
b[i,j,k] = a[i,j,k]
print 'Nested loop time = %g secs' % (time.time() - t)
t = time.time()
for (i,j,k) in itertools.product(range(n), repeat=3):
c[i,j,k] = a[i,j,k]
print 'Itertools loop time = %g secs' % (time.time() - t)发布于 2012-02-18 07:16:15
第二个循环似乎确实比第一个循环慢,这可能是因为元组解包。你不需要这样做,我发现这样做会让第二个循环更快:
for ijk in itertools.product(range(n), repeat=3):
c[ijk] = a[ijk]当然,使用numpy时,您希望完全避免遍历元素,而是一次在整个数组上使用numpy操作。这样,所有的循环,等等,都是用C语言完成的,你会得到巨大的加速。
https://stackoverflow.com/questions/9336727
复制相似问题