Проблема: я хочу создать 5-мерную матрицу numpy, значение каждого столбца которой ограничено диапазоном. Я не могу найти решение онлайн для этой проблемы.
Я пытаюсь создать список правил в виде
Rule: (wordIndex, row, col, dh, dv)
, где каждый столбец имеет значения в диапазоне ((0-7), (0,11), (0 , 11), (-1,1), (-1,1)). Я хочу генерировать все возможные комбинации.
Я мог бы легко сделать матрицу, используя пять циклов, один внутри другого
m, n = 12, 12
rules =[]
for wordIndex in range(0, 15):
for row in range(0,m):
for col in range(0,n):
for dh in range(-1,2):
for dv in range(-1,2):
rules.append([wordIndex, row, col, dh, dv])
Но этот подход требует экспоненциально большого времени, и мне интересно, есть ли лучший, векторизованный подход к решить эту проблему, используя numpy.
Я пробовал следующее, но, похоже, ни один из них не работает:
rules = np.mgrid[words[0]:words[-1], 0:11, 0:11, -1:1, -1:1]
rules = np.rollaxis(words,0,4)
rules = rules.reshape((len(words)*11*11*3*3, 5))
Еще один сбойный подход:
values = list(itertools.product(len(wordsGiven()), range(11), range(11), range(-1,1), range(-1,1)))
I также попробовал np.arange (), но не могу понять, как использовать if для многомерного массива.