我有一个 4 维数组 L。L.shape = [31, 13, 250, 501]
我需要执行使用不同元素的操作。
方法一:
for i1 in range(31):
for i2 in range(15):
for i3 in range(250):
for i4 in range(501):
L[i1, i2, i3, i4] # some operations involving this element
方法2:
for i2 in range(15):
for i1 in range(31):
for i4 in range(501):
for i3 in range(250):
L[i1, i2, i3, i4] # some operations involving this element
执行速度是否取决于 for 循环的嵌套方式?
最佳答案
注意模式
for i in range(a):
for j in range(b):
#do stuff
涉及调用range()
功能a+1
次。如果a > b
,这将低于
for j in range(b):
for i in range(a):
#do stuff
你可以算出来
for i in range(a):
for j in range(b):
for k in range(c):
for l in range(d):
#do stuff
调用范围函数1 + a + a*b + a*b*c
很多次,当 a <= b <= c <= d
时最小化。在你的例子中,你可以算出最有效和最不有效的循环方式之间的差异(通过范围调用的数量来衡量)大约是 34 倍,这比我最初的预期要高。这并不意味着一种方法会比另一种方法快 34 倍。在典型的代码中,无论您如何管理簿记,最内层循环的主体都会主导执行时间。
说了这么多,切换到NumPy (如果您还没有使用它)可能是使代码快速运行的最佳方法。
关于python - 在python中高效读取数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57325536/