14

I want a function that behaves like enumerate, but on numpy arrays.

>>> 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

Currently I am using this function:

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

Is there any better way to do this? E.g. an inbuilt function (I couldn't find any), or a different definition that is faster in some way.

1

1 Answer 1

26

You want 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')
Sign up to request clarification or add additional context in comments.

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.