2017-10-28 107 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)的所有不同組合(排序)。 –