问题描述
我有一个大小为(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)