2017-02-26 26 views
1

Python版本:2.7Meshgrid在numpy的正圓柱矩陣(或者不服)

我有以下numpy 2D陣列:

array([[ -5.05000000e+01, -1.05000000e+01], 
    [ -4.04000000e+01, -8.40000000e+00], 
    [ -3.03000000e+01, -6.30000000e+00], 
    [ -2.02000000e+01, -4.20000000e+00], 
    [ -1.01000000e+01, -2.10000000e+00], 
    [ 7.10542736e-15, -1.77635684e-15], 
    [ 1.01000000e+01, 2.10000000e+00], 
    [ 2.02000000e+01, 4.20000000e+00], 
    [ 3.03000000e+01, 6.30000000e+00], 
    [ 4.04000000e+01, 8.40000000e+00]]) 

如果我想找到的所有組合第一和第二列,我會用np.array(np.meshgrid(first_column, second_column)).T.reshape(-1,2)。因此,我會得到一個100*1 matrix10*10 = 100 data points。但是,我的矩陣可以有3列,4列或更多列,所以我有一個使用這個函數的問題。

問題:我如何製作3列以上的自動meshgridded矩陣?

UPD:例如,我有初始陣列:

[[-50.5 -10.5] 
[ 0. 0. ]] 

結果,我想有輸出數組這樣的:

array([[-10.5, -50.5], 
    [-10.5, 0. ], 
    [ 0. , -50.5], 
    [ 0. , 0. ]]) 

或該:

array([[-50.5, -10.5], 
    [-50.5, 0. ], 
    [ 0. , -10.5], 
    [ 0. , 0. ]]) 
+0

通過'3,4,以上dimensional',你的意思有'3,4,或更多相當數量的列?爲了澄清,你可以添加3個「三維」數據的樣本?另外,'np.meshgrid(first_column,second_column)'會給你一個兩個數組的列表,每個數組有100個元素。那麼,你會如何擁有'100 * 1矩陣'? – Divakar

+0

@Divakar,是的,你是對的。我會更新我的描述。 – Alex

回答

1

您可以在轉置陣列上使用* operator版本,順序解壓這些列。最後,需要交換軸操作將輸出網格數組合併爲一個數組。

因此,一個通用的解決方案是 -

np.swapaxes(np.meshgrid(*arr.T),0,2) 

採樣運行 -

In [44]: arr 
Out[44]: 
array([[-50.5, -10.5], 
     [ 0. , 0. ]]) 

In [45]: np.swapaxes(np.meshgrid(*arr.T),0,2) 
Out[45]: 
array([[[-50.5, -10.5], 
     [-50.5, 0. ]], 

     [[ 0. , -10.5], 
     [ 0. , 0. ]]]) 
+0

恐怕不行。如果我有一個2×2矩陣是這樣的: [-50.5 -10.5] [0 0] 輸入後'X_total = np.meshgrid(* X_total.T)'我會得到: [ array([[ - 50.5,0], [-50.5,0。]]),array([[ - 10.5,-10.5], [0.,0]])] 反而我想: 陣列([[ - 10.5,-50.5], [-10.5,0], [0,-50.5], [0。,0]]) – Alex

+0

@Alex檢查出的編輯。 – Divakar