创建 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)]
我想创建一个 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)]