154 votes

Itérer sur un tableau numpy

Existe-t-il une alternative moins verbeuse à ceci:

 for x in xrange(array.shape[0]):
    for y in xrange(array.shape[1]):
        do_stuff(x, y)
 

Je suis venu avec ceci:

 for x, y in itertools.product(map(xrange, array.shape)):
    do_stuff(x, y)
 

Ce qui sauve une indentation, mais reste quand même assez moche.

J'espère quelque chose qui ressemble à ce pseudocode:

 for x, y in array.indices:
    do_stuff(x, y)
 

Est-ce que quelque chose comme ça existe?

212voto

SiggyF Points 5320

Je pense que vous recherchez le ndenumerate .

 >>> a =numpy.array([[1,2],[3,4],[5,6]])
>>> for (x,y), value in numpy.ndenumerate(a):
...  print x,y
... 
0 0
0 1
1 0
1 1
2 0
2 1
 

48voto

senderle Points 41607

Si vous avez seulement besoin des indices, vous pouvez essayer numpy.ndindex :

 >>> a = numpy.arange(9).reshape(3, 3)
>>> [(x, y) for x, y in numpy.ndindex(a.shape)]
[(0, 0), (0, 1), (0, 2), (1, 0), (1, 1), (1, 2), (2, 0), (2, 1), (2, 2)]
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X