在numpy中遍历二维数组的Python枚举

14

我希望有一个像 enumerate 一样的函数,但是可以用于 numpy 数组。

>>> list(enumerate("hello"))
[(0, "h"), (1, "e"), (2, "l"), (3, "l"), (4, "o")]

>>> for x, y, element in enumerate2(numpy.array([[i for i in "egg"] for j in range(3)])):
        print(x, y, element)

0 0 e
1 0 g
2 0 g
0 1 e
1 1 g
2 1 g
0 2 e
1 2 g
2 2 g

目前我正在使用这个函数:

def enumerate2(np_array):
    for y, row in enumerate(np_array):
        for x, element in enumerate(row):
            yield (x, y, element)

有没有更好的方法来实现这个?例如内置函数(我没找到任何一个),或者一种在某些方面更快的不同定义。


3
可能是重复问题:如何遍历一个numpy数组,或者如果您不关心顺序:https://dev59.com/m3NA5IYBdhLWcg3wa9Gp#971774。 - tom10
1个回答

26

你想使用 np.ndenumerate

>>> for (x, y), element in np.ndenumerate(np.array([[i for i in "egg"] for j in range(3)])):
...     print(x, y, element)
... 
(0L, 0L, 'e')
(0L, 1L, 'g')
(0L, 2L, 'g')
(1L, 0L, 'e')
(1L, 1L, 'g')
(1L, 2L, 'g')
(2L, 0L, 'e')
(2L, 1L, 'g')
(2L, 2L, 'g')

谢谢,当n分钟过去后我会接受这个。我猜我应该看看库的其他部分而不是数组方法,我想这样更有意义。 - rlms

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接