Numpy:3D到2D矩阵沿着一个轴重新整形

时间:2014-05-04 14:11:03

标签: arrays numpy reshape

我想从磁盘读取非常大的二进制文件(GB +)并进行重新整形以便进一步处理。数据的结构如下:有F帧,每帧由长度为N的B块组成,而N是数字。我用np.fromfile读取数据并获得1D np.array。我想以它们的形状(F * N,B)重塑数据,这样我就可以轻松地对块进行操作。 我有一个方法可以做我想要的 - 但它使用for循环并构建一个新数组(因此效率不高):

import numpy as np
F,B,N= 2,2,2
Data3D = np.arange(F*B*N).reshape(F,B,N)
Data2D = np.zeros(F*B*N).reshape(F*N,B)

for i in np.arange(B):
   Data2D[:,i] = Data3D[:,i,:].ravel()

我没有通过直接重塑变换实现扁平化顺序(np.ravel()保持顺序),但我想有一种有效/基本的numpy方法。

1 个答案:

答案 0 :(得分:3)

基本上,您希望将形状(F, B, N)的数组转换为形状(F, N, B)的数组。这可以通过Numpy的transpose()函数轻松实现,它允许aribtrary索引排列。如果要将前两个维度合并在一起,则可以应用适当的重塑:

import numpy as np
F,B,N= 2,2,2
Data3D = np.arange(F*B*N).reshape(F,B,N)
Data2D = np.transpose(Data3D, (0, 2, 1)).reshape(F * N, B)