我想創建一個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
尼斯遞歸:)從來沒有想過我自己的一個。 –