2014-05-04 48 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