创建N维“排列”矩阵

时间:2016-01-23 01:17:35

标签: python arrays matrix permutation

我想创建一个包含所有可能组合的n维矩阵,其数组值介于-1和+1之间。

因此,对于n = 2,这看起来像是:

[[-1,-1], [-1,0], [-1,+1], [0,-1], [0,0], [0,+1], [1,-1], [1,0], [1,1]]

矩阵本身将用于计算对象的周围点。

我已经使用多个for循环编写了一个非常简单的解决方案,但我希望解决方案独立于维度。我希望有人可以提供帮助。

2 个答案:

答案 0 :(得分:1)

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.希望它有所帮助。

答案 1 :(得分:0)

这听起来像是在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)]