Есть ли менее многословная альтернатива этому:
for x in xrange(array.shape[0]):
for y in xrange(array.shape[1]):
do_stuff(x, y)
Я придумал это:
for x, y in itertools.product(map(xrange, array.shape)):
do_stuff(x, y)
Который сохраняет один отступ, но все еще довольно уродлив.
Я надеюсь на что-то похожее на этот псевдокод:
for x, y in array.indices:
do_stuff(x, y)
Существует ли что-нибудь подобное?
for x, y in itertools.product(*map(xrange, array.shape)):
Ответы:
Я думаю, что вы ищете число .
По поводу производительности. Это немного медленнее, чем понимание списка.
Если вас беспокоит производительность, вы могли бы немного оптимизировать ее, взглянув на реализацию
ndenumerate
, которая выполняет две вещи: преобразование в массив и циклическое выполнение. Если вы знаете, что у вас есть массив, вы можете вызвать.coords
атрибут плоского итератора.источник
Если вам нужны только индексы, вы можете попробовать
numpy.ndindex
:источник
увидеть nditer
источник