NumPy:使用ndi迭代NumPy数组的外部维度

2024-10-03 19:27:53 发布

您现在位置:Python中文网/ 问答频道 /正文

我无法迭代numpy数组的外轴。在

import numpy as np

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

正如人们所期望的那样:

^{pr2}$

但是,我希望输出分成三个部分,这样我就可以在外部轴上迭代:

(0, 1, 2)
(3, 4, 5)

我知道有很多方法可以实现这一点,但是在仔细研究了nditer documentation之后,我似乎找不到使用nditer的解决方案。我正利用这个机会学习nditer。所以我宁愿不使用其他解决方案,除非它真的更有效或者更像Python。在


Tags: inimportnumpyforasnpit数组
2条回答

您可以像迭代一维数组一样迭代它以获得所需的输出。在

 for k,v in enumerate(a):
      print(v)

使用普通的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。它创建了一个降维的虚拟数组,并对其进行了指示:

^{pr2}$

明白了:

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

相关问题 更多 >