繁体   English   中英

在python中展平/重塑3D数组

[英]flatten / reshape 3D array in python

我有一个大小为 (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,)。 有没有一种优雅的方式来做到这一点?

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)简称。

尝试:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM