Python 使用numpy数组在循环中索引顺序
在一个numpy数组中进行几个循环是否有一个特定的顺序以实现快速?我的意思是,设为Python 使用numpy数组在循环中索引顺序,python,arrays,loops,numpy,Python,Arrays,Loops,Numpy,在一个numpy数组中进行几个循环是否有一个特定的顺序以实现快速?我的意思是,设为AA=A(I,j,k)的numpy数组 如果我必须做循环,我应该按什么顺序做for序列? 谢谢您是在所有维度上循环,还是只在一个维度上循环 for aa in A: print(aa) 迭代第1维 e、 g 您可以通过索引在其他维度上进行迭代 In [482]: for j in range(4): .....: print(A[:,j]) .....: [0 4 8] [1
A
A=A(I,j,k)的numpy数组
如果我必须做循环,我应该按什么顺序做for序列?
谢谢您是在所有维度上循环,还是只在一个维度上循环
for aa in A:
print(aa)
迭代第1维
e、 g
您可以通过索引在其他维度上进行迭代
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]
无论嵌套循环的顺序如何,都将非常慢。如果在Python中的NumPy数组上循环,那么您已经失败了。在
NumPy
中保持快速的诀窍是使用NumPy
的向量化操作,尽可能少地循环。如果您发布一些示例代码,人们可能会向您展示如何做到这一点。
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]