2016-02-19 229 views
3

我有一個12X2陣列,我想重新組織爲3x4x2陣列。具體來說,我想改變將2D numpy陣列重組爲3D

a = np.array(([1,13],[2,14],[3,15],[4,16],[5,17],[6,18],[7,19],[8,20],[9,21],[10,22],[11,23],[12,24])) 

[[ 1 13] 
[ 2 14] 
[ 3 15] 
[ 4 16] 
[ 5 17] 
[ 6 18] 
[ 7 19] 
[ 8 20] 
[ 9 21] 
[10 22] 
[11 23] 
[12 24]]` 

成看起來像這樣一個矩陣:

[[[ 1. 2. 3. 4.] 
[ 5. 6. 7. 8.] 
[ 9. 10. 11. 12.]] 
[[ 13. 14. 15. 16.] 
[ 17. 18. 19. 20.] 
[ 21. 22. 23. 24.]]] 

我在想一個三重嵌套的循環,但我編寫的方式是行不通的。而且我無法將自己的頭圍繞在numpy索引上,以便弄清楚如何做到這一點。

這當然是示例代碼。我想改變這一點,以便在緯度 - 經度網格上繪製3個全球降水的3個EOF圖。 EOF正從8192x8192陣列拉出並放入64x128x3陣列。 (我只使用大矩陣的前3列,每列都是EOF,每個列都是沿着第一個緯度的經度列出的值,然後再按第二個緯度再按經度列出,等等直到第128個緯度在列的底部。當然,當我第一緯度是-87.something時,我的數組將相對於底圖顛倒,但是我打算使用np.flipud修復它,一旦它的完成

回答

2

您可以使用np.reshapenp.transpose組合,像這樣 -

a.reshape(3,4,-1).transpose(2,0,1) 

因此,對於您的實際情況(如果我理解正確的話)將是 -

a.reshape(64,128,-1).transpose(2,0,1) 

請注意,這種情況下的輸出形狀將是(3, 64, 128)。所以,我假設示例與您的實際案例不一致。

+0

這只是給我回完全相同的矩陣。我的矩陣現在是(2,0,1),我想將其更改爲(3,4,2) – ChristineB

+1

@ChristineB問題中列出的預期輸出看起來像是形狀'(2,3,4)'(2沿着軸= 0,3沿着軸= 1是行,沿着軸= 2是列4)。你確定你想要一個'(3,4,2)'的形狀嗎? 'a.reshape(3,4,2)'會爲你工作嗎? – Divakar

+1

沒關係我的評論。我在下一行輸入了你的建議並打印了(a),但我忘記用它的重塑+轉置替換變量a。謝謝! – ChristineB

1

有很多方法可以做到這一點,怎麼樣a.T.reshape(2,3,4)

n [14]: a.T.reshape(2,3,4) 
Out[14]: 
array([[[ 1, 2, 3, 4], 
     [ 5, 6, 7, 8], 
     [ 9, 10, 11, 12]], 

     [[13, 14, 15, 16], 
     [17, 18, 19, 20], 
     [21, 22, 23, 24]]])