我有一个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。一旦它完成就会修复它。
答案 0 :(得分:2)
您可以使用np.reshape
和np.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]]])