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

问题描述

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

为简化起见,让我们采用2D数组

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,axis=-1)
print(b.shape)
(3,3,4)

使得b只是相同的数据(a),并串联起来作为对我希望实现的完整数据的一种小规模练习。如果我这样做:

b.flatten()
array([1,1,4,6,7,9,9])

这没有给我我想要的答案。我还在寻找:

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

其中满量程输出的尺寸应为(450 * 552,30)。而不是(450 * 552 * 30,)。有一种优雅的方法吗?

解决方法

stack

让一个连接到一个列表(In [66]: b = np.stack([a,a,a],2) In [67]: b.shape Out[67]: (3,3,4) In [68]: b.ravel() Out[68]: array([1,1,2,4,5,6,7,8,9,9]) In [69]: b.reshape(9,4) Out[69]: array([[1,1],[2,2],[3,3],[4,4],[5,5],[6,6],[7,7],[8,8],[9,9]]) 为我们执行expand_dims):

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

OR

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

(reshape(k*m,n)

如果您已经有了(k,m,n)数组,请猜测这些最后一个与您无关。您只需要简称(-1,n)或{{1}}。

,

尝试:

cv2.merge([a,a])

输出:

array([[[1,3]],[[4,6]],[[7,9]]],dtype=int32)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...