为什么将两个循环融合在一起不会产生与嵌套循环相同的结果?
Why doesn't fusing two loops together produce the same result as a nested loop?
(使用 python 2)
有人建议我将我的两个循环融合在一起,以加速我的代码,因为它花费的时间太长了。
所以不是这个:
for timestep in range(0,100):
for xn in xrange(0,npoints):
for step in xrange(0,npoints):
fx=somefunction[xn]+somefunction[step]
print fx
我用过这个:
for timestep in xrange(0,100):
for step, xn in itertools.product([0,npoints-1],[0,npoints-1]):
fx=somefunction[xn]+somefunction[step]
print fx
但是当我打印出我的函数 fx 时,我得到了两个截然不同的结果。
对于嵌套循环(第一个代码块),我得到了一个包含 999 个数字的列表(这是正确的长度)。
但是,当我尝试将两个循环合并在一起时(第二个代码块),我只得到了我应该在列表中得到的 999 个数字中的四个。
我合并我的for循环错了吗?还有另一种方法可以将嵌套的 for 循环合并在一起,这仍然有助于加快我的代码速度吗?
您得到的结果不同,因为您使用的序列不同。您仍然需要 xrange
,因为 product
采用 iterables,而不是端点对作为其参数。
for step, xn in itertools.product(xrange(0, npoints), repeat=2):
使用 product([0,n_points-1], [0,n_points-1])
,您仅迭代元组:(0,0)
、(0,n_points-1)
、(n_points-1,0)
和 (n_points-1,n_points-1)
,而不是 O(n_points**2
) 您想要的不同元组。`
(使用 python 2)
有人建议我将我的两个循环融合在一起,以加速我的代码,因为它花费的时间太长了。
所以不是这个:
for timestep in range(0,100):
for xn in xrange(0,npoints):
for step in xrange(0,npoints):
fx=somefunction[xn]+somefunction[step]
print fx
我用过这个:
for timestep in xrange(0,100):
for step, xn in itertools.product([0,npoints-1],[0,npoints-1]):
fx=somefunction[xn]+somefunction[step]
print fx
但是当我打印出我的函数 fx 时,我得到了两个截然不同的结果。
对于嵌套循环(第一个代码块),我得到了一个包含 999 个数字的列表(这是正确的长度)。
但是,当我尝试将两个循环合并在一起时(第二个代码块),我只得到了我应该在列表中得到的 999 个数字中的四个。
我合并我的for循环错了吗?还有另一种方法可以将嵌套的 for 循环合并在一起,这仍然有助于加快我的代码速度吗?
您得到的结果不同,因为您使用的序列不同。您仍然需要 xrange
,因为 product
采用 iterables,而不是端点对作为其参数。
for step, xn in itertools.product(xrange(0, npoints), repeat=2):
使用 product([0,n_points-1], [0,n_points-1])
,您仅迭代元组:(0,0)
、(0,n_points-1)
、(n_points-1,0)
和 (n_points-1,n_points-1)
,而不是 O(n_points**2
) 您想要的不同元组。`