2017-10-28 73 views
0

我知道有关于计算器关于名单的排列,并列出清单的几个问题,但是,我没有找到我下面的问题一个聪明的解决办法:创建所有可能的载体组合的欧几里得坐标系统

我想创建欧几里德所有可能的矢量基础坐标系:

import numpy as np 
euclidean_system = np.array([[1,0,0], 
          [0,1,0], 
          [0,0,1]]) 

现在我想的东西像itertools的排列/产品功能键入:

permutations = *desired_function*(euclidean_system) 

然后得到

permutations = [[[1,0,0],[0,1,0],[0,0,1]], 
       [[0,1,0],[1,0,0],[0,0,1]], 
       [[0,0,1],[0,1,0],[1,0,0]] # and so on 
       ] 

截至目前,这是与和itertools.permutations容易可行的,但是我想还包括其中1或2或3的载体是负的情况下,例如

additional_permutations = [[[1,0,0],[0,1,0],[0,0,1]], 
          [[-1,0,0],[0,1,0],[0,0,1]], 
          [[1,0,0],[0,-1,0],[0,0,-1]] # and so on 
          ] 

我知道我可以手工输入,但我不知道是否有一个巧妙的解决了这一点。 谢谢!

+0

你可以看看'np.meshgrid'。它确实输出你想要的,但是以不同的格式输出。 –

回答

0

您可能正在寻找itertools.product。它为输入迭代的笛卡尔坐标创建一个生成器。

from itertools import product 
list(product([-1,0,1],[-1,0,1],[-1,0,1])) 
# returns: 
[(-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)] 
+0

我知道itertools的产品功能,但是,这不完全是我需要的输出。我需要我的输出采用包含3x3矩阵的列表形式,其中包含单位x/y/z向量(正数和负数1)的所有不同组合(排序)。 –