我无法迭代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。
答案 0 :(得分:2)
使用普通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
。它创建了一个尺寸减小的虚拟数组,并对其进行了编写:
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在1d结构化数组上的区别:https://stackoverflow.com/a/43005985/901925
答案 1 :(得分:0)
您可以迭代它,就像迭代一维数组以获得您想要的输出一样。
for k,v in enumerate(a):
print(v)