创建 N 维 "Permutation" 矩阵

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