gpt4 book ai didi

python - numpy 数组循环中的索引顺序

转载 作者:太空宇宙 更新时间:2023-11-03 17:16:21 25 4
gpt4 key购买 nike

是否有特定的顺序可以在 numpy 数组中进行多次循环以提高速度?我的意思是,设 A 是一个带有 A = A(i,j,k) 的 numpy 数组。

如果我必须创建循环,我应该按什么顺序执行 for 序列?谢谢

最佳答案

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

for aa in A:
print(aa)

迭代第一维

例如

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]

无论嵌套循环的顺序如何,都会非常慢。

关于python - numpy 数组循环中的索引顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33642212/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com