2014-05-04 51 views
0

我想从磁盘读取非常大的二进制文件(GB +),并为进一步处理做一次重塑。数据结构如下:有F帧,每帧由长度为N的B块组成,而N为数字。我用np.fromfile读取数据并获得一维np.array。我想要以他们的形状(F * N,B)重塑数据,以便我可以轻松地在块上操作。 我有一个办法,我想要做什么 - 但它使用一个for循环,并建立一个新的数组(所以不是很有效):Numpy:3D到2D maxtrix沿着一个轴平展顺序重塑

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方法。

回答

3

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

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) 
+0

正是我在找什么!谢谢! – tomatopete