【问题标题】:Reorganizing a 2D numpy array into 3D将 2D numpy 数组重组为 3D
【发布时间】:2016-06-01 12:07:30
【问题描述】:

我有一个 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 个 EOF 的 3 个图。 EOF 从 8192x8192 阵列中提取并放入 64x128x3 阵列中。 (我只使用大矩阵的前 3 列。每一列都是一个 EOF,在每一列下方,值按经度沿第一个纬度列出,然后按经度再次沿第二个纬度列出,依此类推一直向下直到列底部的第 128 个纬度。当然,当我完成时,我的数组将相对于底图颠倒,因为第一个纬度是 -87.something,但我打算使用 np.flipud 来完成后修复它。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    你可以使用np.reshapenp.transpose的组合,像这样-

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

    因此,对于您的实际情况(如果我理解正确的话)将是 -

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

    请注意,这种情况下的输出形状将是(3, 64, 128)。所以,我假设示例案例与您的实际案例不完全对应。

    【讨论】:

    • 这只是给了我完全相同的矩阵。我的矩阵现在是 (2,0,1) 我想把它改成 (3,4,2)
    • @ChristineB 问题中列出的预期输出看起来像 (2,3,4) (沿轴 = 0 的 2 个,沿轴 = 1 的 3 个是行,沿轴 = 2 的 4 个是列)。您确定要(3,4,2) 的形状吗? a.reshape(3,4,2) 会为你工作吗?
    • 别介意我的评论。我在下一行输入了您的建议和 print(a),但我忘记用它的 reshape+transpose 替换变量 a。谢谢!
    【解决方案2】:

    方法有很多,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]]])
    

    【讨论】:

      猜你喜欢
      • 2017-09-18
      • 2016-05-22
      • 2021-12-29
      • 2019-10-31
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 2015-10-19
      • 2019-09-12
      相关资源
      最近更新 更多