Скажем, у меня есть произвольный массив переменного порядка N. Например: A - это массив 2x3x3, это массив порядка 3 с 2,3 и 3 размерами вдоль его трех индексов.
Я хотел бы эффективно перебрать каждый элемент. Если бы я знал априори порядок, я мог бы сделать что-то вроде (на python),
#for order 3
import numpy as np
shape = np.shape(A)
i = 0
while i < shape[0]:
j = 0
while j < shape[1]:
k = 0
while k < shape[2]:
#code using i,j,k
k += 1
j += 1
i += 1
Теперь предположим, что я не знаю порядок A, т.е. я не знаю априори длину shape
. Как я могу быстро переставить все элементы массива?
for indices in itertools.product(*map(range, shape)):
, но кажется маловероятным, что это лучший подход. - person jonrsharpe   schedule 11.09.2015for indices in range(a.size): indices = np.unravel_index(i, a.shape)
. - person Sven Marnach   schedule 11.09.2015np.unravel_index()
или, что еще проще, перебратьa.flat
. - person Sven Marnach   schedule 11.09.2015itertools.product()
илиnp.unravel_index()
. Однако использование этих методов оставило бы их в неведении относительно того, как на самом деле работает рекурсивный инструмент. Мой пример ниже должен помочь им понять. Тогда они смогут продуктивно использовать другие предложенные методы. - person Alea Kootz   schedule 11.09.2015