我想创建一个n维矩阵,其中包含所有可能的组合,数组值介于-1和+1之间。创建N维“排列”矩阵
所以对于n = 2,这将看起来像到以下:
[[-1,-1], [-1,0], [-1,+1], [0,-1], [0,0], [0,+1], [1,-1], [1,0], [1,1]]
本身将被用于计算物体的周围的点的矩阵。
我已经写了一个相当简单的解决方案,使用多个for循环,但我希望解决方案独立于维度。我希望有人能帮帮忙。
我想创建一个n维矩阵,其中包含所有可能的组合,数组值介于-1和+1之间。创建N维“排列”矩阵
所以对于n = 2,这将看起来像到以下:
[[-1,-1], [-1,0], [-1,+1], [0,-1], [0,0], [0,+1], [1,-1], [1,0], [1,1]]
本身将被用于计算物体的周围的点的矩阵。
我已经写了一个相当简单的解决方案,使用多个for循环,但我希望解决方案独立于维度。我希望有人能帮帮忙。
def n_dims(dims, start, stop):
if dims == 1:
return list(map(lambda x: [x], range(start, stop)))
else:
p = n_dims(dims - 1, start, stop)
a = []
for i in range(start, stop):
a += [j + [i] for j in p]
return a
这似乎在python 3中工作。希望它有帮助。
这听起来像是一个机会,利用迭代函数,我通常没有必要玩:
from itertools import product, repeat
def n_dimensional_matrix(n, start=-1, stop=1):
return product(*repeat(range(start, stop+1), n))
现在尝试的2维的例子:
>>> matrix = n_dimensional_matrix(2)
>>>
>>> print(list(matrix))
[(-1, -1), (-1, 0), (-1, 1), (0, -1), (0, 0), (0, 1), (1, -1), (1, 0), (1, 1)]
张奕甘地澄清了什么输出更大的尺寸应该是(谢谢):
>>> list(n_dimensional_matrix(3))
[(-1, -1, -1), (-1, -1, 0), (-1, -1, 1), (-1, 0, -1), (-1, 0, 0), (-1, 0, 1), (-1, 1, -1), (-1, 1, 0), (-1, 1, 1), (0, -1, -1), (0, -1, 0), (0, -1, 1), (0, 0, -1), (0, 0, 0), (0, 0, 1), (0, 1, -1), (0, 1, 0), (0, 1, 1), (1, -1, -1), (1, -1, 0), (1, -1, 1), (1, 0, -1), (1, 0, 0), (1, 0, 1), (1, 1, -1), (1, 1, 0), (1, 1, 1)]
这太棒了!我认为关键的区别在于(看起来像)菲利普布劳恩想要的范围(-1,2)'不管维度。 –
谢谢@HemanGandhi,我相应地调整了我的解决方案。 – cdlane
尼斯递归:)从来没有想过我自己的一个。 –