我试图使用Python的itertools
模块来加速三重嵌套for循环。下面的测试代码将标准三重嵌套循环与itertools的产品方法和输出进行比较:
嵌套循环时间=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)
似乎第二个循环比第一个慢,可能是因为元组解包。你不必这样做,我发现这样做会使第二个循环更快:
当然,对于numpy,您根本不想在元素上循环,而是一次对整个数组使用numpy操作。这样,所有的循环,等等,都是在C语言中完成的,你会得到巨大的加速。在
对于
n
的大值,itertools.product
看起来确实比较慢:在没有元组解包的情况下:
^{2}$此外,为了好玩,请列出理解和生成器表达式:
这些基准测试是用
python version
运行的:相关问题 更多 >
编程相关推荐