Existe uma alternativa menos detalhada para isso:
for x in xrange(array.shape[0]):
for y in xrange(array.shape[1]):
do_stuff(x, y)
Eu vim com isso:
for x, y in itertools.product(map(xrange, array.shape)):
do_stuff(x, y)
O que economiza um recuo, mas ainda é muito feio.
Espero algo parecido com este pseudocódigo:
for x, y in array.indices:
do_stuff(x, y)
Existe algo assim?
for x, y in itertools.product(*map(xrange, array.shape)):
Respostas:
Eu acho que você está procurando o ndenumerate .
Em relação ao desempenho. É um pouco mais lento que a compreensão de uma lista.
Se você estiver preocupado com o desempenho, poderá otimizar um pouco mais olhando a implementação de
ndenumerate
, que faz duas coisas, convertendo em uma matriz e fazendo um loop. Se você souber que possui uma matriz, poderá chamar o.coords
atributo do iterador plano.fonte
Se você precisar apenas dos índices, tente
numpy.ndindex
:fonte
veja o editor
fonte