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 économise une indentation, mais reste 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?
for x, y in itertools.product(*map(xrange, array.shape)):
Réponses:
Je pense que vous recherchez le ndenumerate .
Concernant la performance. C'est un peu plus lent qu'une compréhension de liste.
Si vous êtes préoccupé par les performances, vous pouvez optimiser un peu plus en regardant l'implémentation de
ndenumerate
, qui fait 2 choses, la conversion en tableau et la mise en boucle. Si vous savez que vous avez un tableau, vous pouvez appeler l'.coords
attribut de l'itérateur plat.la source
Si vous n'avez besoin que des indices, vous pouvez essayer
numpy.ndindex
:la source
voir nditer
la source