gpt4 book ai didi

python - NumPy:使用 nditer 迭代 numpy 数组的外部维度

转载 作者:行者123 更新时间:2023-12-04 12:45:40 25 4
gpt4 key购买 nike

我无法遍历 numpy 数组的外轴。

import numpy as np

a = np.arange(2*3).reshape(2,3)
it = np.nditer(a)
for i in it:
print i

正如人们所料,这给出了:
0
1
2
3
4
5

但是,我希望输出为三个,这样我就可以在外轴上进行迭代:
(0, 1, 2)
(3, 4, 5)

我知道有很多方法可以实现这一点,但是在倾注了 nditer documentation 之后,我似乎无法使用 nditer 找到解决方案。我以此为契机来学习 nditer。所以我宁愿不使用其他解决方案,除非它真的更高效或 Pythonic。

最佳答案

使用简单的 for 更容易控制迭代:

In [17]: a
Out[17]:
array([[0, 1, 2],
[3, 4, 5]])
In [18]: for row in a:
...: print(row)
...:
[0 1 2]
[3 4 5]

使用 nditer 执行此操作只是很尴尬。除非你需要广播使用 cython如页面末尾所述, nditer不提供任何速度优势。即使与 cython ,我通过 memoryviews 获得了更好的速度比 nditer .

np.ndindex .它创建一个维度减少的虚拟数组,并在其上执行 nditer:
In [20]: for i in np.ndindex(a.shape[0]):
...: print(a[i,:])
...:
[[0 1 2]]
[[3 4 5]]

知道了:
In [31]: for x in np.nditer(a.T.copy(), flags=['external_loop'], order='F'):
...: print(x)

[0 1 2]
[3 4 5]

就像我说的 - 尴尬

我最近在一个一维结构化数组上探索了直接迭代和 nditer 之间的区别: https://stackoverflow.com/a/43005985/901925

关于python - NumPy:使用 nditer 迭代 numpy 数组的外部维度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43018527/

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