将2D numpy数组重组为3D

时间:2016-02-19 19:28:25

标签: python arrays numpy

我有一个12X2阵列,我想重新组织成一个3x4x2阵列。具体来说,我想改变

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.]]]

我在想一个三重嵌套for循环,但我编写它的方式不起作用。而且我无法绕过numpy索引,足以弄清楚如何做到这一点。

这当然是示例代码。我想改变它,以便在纬度 - 经度网格上制作3个全球降水的前3个EOF图。 EOF从8192x8192阵列中拉出并放入64x128x3阵列。 (我只使用大矩阵的前3列。每列都是一个EOF,每个列向下,值沿着第一个纬度沿经度列出,然后沿着第二个纬度再次以经度列出,直到列底部的第128个纬度。当然,当我完成时,我的数组将相对于基本地图倒置,因为第一个纬度是-87.something,但我打算使用np。一旦它完成就会修复它。

2 个答案:

答案 0 :(得分: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)。因此,我假设样本案例与您的实际案例不符。

答案 1 :(得分: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]]])