【发布时间】:2020-04-26 02:35:24
【问题描述】:
问题: 我想创建一个 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)))
我也尝试了 np.arange() 但似乎无法弄清楚如何将 if 用于多维数组。
【问题讨论】: