簡體   English   中英

創建N維“置換”矩陣

[英]Creating N-Dimensional “Permutation” Matrix

我想創建一個n維矩陣,其中包含數組值介於-1和+1之間的所有可能組合。

因此,對於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中工作。希望能有所幫助。

這聽起來像是一個機會,可以使用itertools模塊中的功能,而我通常不需要這些功能:

from itertools import product, repeat

def n_dimensional_matrix(n, start=-1, stop=1):
    return product(*repeat(range(start, stop+1), n))

現在嘗試二維示例:

>>> 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)]

Heman Gandhi闡明了更大尺寸的輸出應該是什么(謝謝):

>>> 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)]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM