¿Existe una alternativa menos detallada para esto?
for x in xrange(array.shape[0]):
for y in xrange(array.shape[1]):
do_stuff(x, y)
Se me ocurrió esto:
for x, y in itertools.product(map(xrange, array.shape)):
do_stuff(x, y)
Lo que ahorra una sangría, pero sigue siendo bastante feo.
Espero algo parecido a este pseudocódigo:
for x, y in array.indices:
do_stuff(x, y)
¿Existe algo así?
for x, y in itertools.product(*map(xrange, array.shape)):
Respuestas:
Creo que estás buscando el numeumerate .
En cuanto al rendimiento. Es un poco más lento que una lista de comprensión.
Si le preocupa el rendimiento, podría optimizar un poco más al observar la implementación de
ndenumerate
, que hace 2 cosas, convertir a una matriz y hacer un bucle. Si sabe que tiene una matriz, puede llamar al.coords
atributo del iterador plano.fuente
Si solo necesita los índices, puede intentar
numpy.ndindex
:fuente
ver nditer
fuente