是否有特定的顺序在numpy数组中制作几个循环以便快速?我的意思是,让A
成为一个带有A = A(i,j,k)
的numpy数组。
如果我必须按顺序制作循环,我应该按顺序进行循环吗? 感谢
答案 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]
无论嵌套循环的顺序如何,都会非常慢。