带有numpy数组的循环索引顺序

时间:2015-11-11 00:26:54

标签: python arrays loops numpy

是否有特定的顺序在numpy数组中制作几个循环以便快速?我的意思是,让A成为一个带有A = A(i,j,k)的numpy数组。

如果我必须按顺序制作循环,我应该按顺序进行循环吗? 感谢

1 个答案:

答案 0 :(得分:1)

您是在循环所有维度,还是仅仅一个?

for aa in A:
   print(aa)

迭代第一维

e.g。

In [479]: A=np.arange(12).reshape(3,4)
In [480]: A
Out[480]: 
array([[ 0,  1,  2,  3],
       [ 4,  5,  6,  7],
       [ 8,  9, 10, 11]])
In [481]: for a in A:
   .....:     print(a)
   .....:     
[0 1 2 3]
[4 5 6 7]
[ 8  9 10 11]

您可以按索引迭代其他维度

In [482]: for j in range(4):
   .....:     print(A[:,j])
   .....:     
[0 4 8]
[1 5 9]
[ 2  6 10]

或转置:

In [483]: for a in A.T:
   .....:     print(a)
   .....:     
[0 4 8]
[1 5 9]
[ 2  6 10]
[ 3  7 11]

如果迭代第一个维度而不是最后一个维度,则有一个小的速度优势。但我强调这是次要的。

最好完全避免循环,使用在整个阵列上同时运行的编译方法。相比之下,迭代速度要慢得多。

for i in range(A.shape[0]):
    for j in range(A.shape[1]):
        for k in range(A.shape[2]):
             A[i,j,k]
无论嵌套循环的顺序如何,

都会非常慢。