【问题标题】:flatten / reshape 3D array in python在python中展平/重塑3D数组
【发布时间】:2020-12-29 10:48:47
【问题描述】:

我有一个大小为 (450,552,30) 的 3D 向量,其中 450 = x 维度,552 = y 维度,30 = 时间步长。本质上,二维对象的延时。我知道有可能的 convLSTM 和 LSTM CNN,但我想将这些数据扁平化为一维 LSTM 模型进行测试。

为了简单起见,让我们采用这样的二维数组

a = np.array([[1,2,3],[4,5,6],[7,8,9]])

然后让我们将它与第三维连接几次:

a = np.expand_dims(a,axis=-1)
b = a
b = np.concatenate((b,a),axis=-1)
b = np.concatenate((b,a),axis=-1)
b = np.concatenate((b,a),axis=-1)
print(b.shape)
(3,3,4)

这样 b 就是相同的数据 (a),将其自身连接起来,作为对我希望实现的全尺寸数据的一种小规模练习。如果我这样做:

b.flatten()
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])

这并没有给我我正在寻找的答案。我正在寻找更多:

array([[1,1,1,1],[2,2,2,2],[3,3,3,3],[4,4,4,4], ..., [9,9,9,9]])

满量程输出的尺寸应为 (450 * 552, 30)。而不是 (450 * 552 * 30,)。有没有一种优雅的方式来做到这一点?

【问题讨论】:

    标签: python arrays numpy reshape flatten


    【解决方案1】:
    In [63]: a = np.arange(1,10).reshape(3,3)
    

    让我们用一个列表连接(stack 为我们做 expand_dims):

    In [66]: b = np.stack([a,a,a,a],2)
    In [67]: b.shape
    Out[67]: (3, 3, 4)
    In [68]: b.ravel()
    Out[68]: 
    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])
    In [69]: b.reshape(9,4)
    Out[69]: 
    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]])
    

    In [71]: a1=a.reshape(9,1)
    In [72]: np.concatenate([a1,a1,a1,a1],axis=1)
    

    In [73]: np.repeat(a1,4,1)
    

    如果你已经有了 (k,m,n) 数组,猜猜最后这些是不相关的。您只需要简写为(reshape(k*m,n)(-1, n)

    【讨论】:

      【解决方案2】:

      试试:

      cv2.merge([a,a,a,a])
      

      输出:

      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]]], dtype=int32)
      

      【讨论】:

      • 当我使用它时,这仍然会输出一个 (3,3,4) 数组。
      猜你喜欢
      • 2021-10-25
      • 2016-01-17
      • 1970-01-01
      • 2016-02-10
      • 1970-01-01
      • 2014-12-27
      • 2023-04-05
      • 2020-11-16
      • 2019-09-12
      相关资源
      最近更新 更多