【问题标题】:How to reshape my 4D-np.array to a 2D matrix and keep the structure?如何将我的 4D-np.array 重塑为 2D 矩阵并保持结构?
【发布时间】:2020-11-12 18:30:40
【问题描述】:

假设我有一个由 4 组 4x4 矩阵组成的 4D np.array:

array([[[[1., 1.],
         [1., 1.]],

        [[2., 2.],
         [2., 2.]],

        [[3., 3.],
         [3., 3.]],

        [[4., 4.],
         [4., 4.]]],


       [[[5., 5.],
         [5., 5.]],

        [[6., 6.],
         [6., 6.]],

        [[7., 7.],
         [7., 7.]],

        [[8., 8.],
         [8., 8.]]],


       [[[9., 9.],
         [9., 9.]],

        [[10., 10.],
         [10., 10.]],

        [[11., 11.],
         [11., 11.]],

        [[12., 12.],
         [12., 12.]]],


       [[[13., 13.],
         [13., 13.]],

        [[14., 14.],
         [14., 14.]],

        [[15., 15.],
         [15., 15.]],

        [[16., 16.],
         [16., 16.]]]])

现在我想将其重塑为单个矩阵,以便我可以将组按行排列(但只有值,而不是矩阵)。我想使用 matplotlib 的 imshow 函数将 4x4 矩阵彼此相邻绘制在一个图中,所以它应该如下所示:

[[ 1.,  1.,  2.,  2.,  3.,  3.,  4.,  4.],
 [ 1.,  1.,  2.,  2.,  3.,  3.,  4.,  4.],
 [ 5.,  5.,  6.,  6.,  7.,  7.,  8.,  8.],
 [ 5.,  5.,  6.,  6.,  7.,  7.,  8.,  8.],
 [ 9.,  9., 10., 10., 11., 11., 12., 12.],
 [ 9.,  9., 10., 10., 11., 11., 12., 12.],
 [13., 13., 14., 14., 15., 15., 16., 16.],
 [13., 13., 14., 14., 15., 15., 16., 16.]]

这甚至可能吗?出于性能原因,我只想使用 numpy 函数并避免使用 for 循环,但如果这不可能,另一种解决方案也会很棒。

【问题讨论】:

    标签: python numpy matplotlib


    【解决方案1】:

    我会这样做:

    # other sample:
    arr=np.arange(64).reshape(4,4,2,2)
    
    arr.swapaxes(2,1).reshape(arr.shape[0] * arr.shape[2],-1)
    

    输出:

    array([[ 0,  1,  4,  5,  8,  9, 12, 13],
           [ 2,  3,  6,  7, 10, 11, 14, 15],
           [16, 17, 20, 21, 24, 25, 28, 29],
           [18, 19, 22, 23, 26, 27, 30, 31],
           [32, 33, 36, 37, 40, 41, 44, 45],
           [34, 35, 38, 39, 42, 43, 46, 47],
           [48, 49, 52, 53, 56, 57, 60, 61],
           [50, 51, 54, 55, 58, 59, 62, 63]])
    

    【讨论】:

      猜你喜欢
      • 2012-01-29
      • 2021-09-14
      • 2023-01-25
      • 2011-01-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-08
      相关资源
      最近更新 更多