2013-12-12 49 views
2

我有一個包含多個.npy文件(numpy數組)的目錄,每個文件都有一個2維數組(相同的寬度和高度)。我需要讀取所有文件並生成一個包含目錄中所有數組的三維數組,結果形狀應該像(文件數,寬度,高度)。用numpy導入數組文件

到目前爲止我的代碼:

import os 
import numpy 

for file in os.listdir(os.getcwd()): 
    result = numpy.load(file) #Obviously this doen't work 

但我就是根本不知道如何生成結果陣列。我應該先創建一個零數組然後填充它嗎?我可以在飛行中做這個嗎? 你能幫我嗎?

+2

['np.dstack(陣列)'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.dstack.html#numpy.dstack) – user2357112

+2

隨着numpy,定義一個零數組並填充內容通常是一個好習慣。 – leeladam

+0

等待,dstack命令的軸不同於我的想法。您可能需要使用切片重新排序或使用其他內容。 – user2357112

回答

2

如果您知道有多少和大小是多少,請首先創建一個空數組。 (空數組速度更快,因爲你沒有零的所有元素。)事情是這樣的:

# Allocate empty array. 
bigarray = numpy.empty([width, height, len(filenames)]); 
# Load files. 
for i in range(len(filenames)): 
    bigarray[:,:,i] = numpy.load(filenames[i]); 

如果你不事先知道尺寸,使用numpy.append。這很慢,因爲它必須在每次迭代中分配一個新的內存塊並複製數據。嘗試:

# Load first array. 
bigarray = numpy.load(filenames[0]); 
# Add a new axis to make it 3D. 
bigarray = bigarray[numpy.newaxis,...]; 
# Load rest of arrays. 
for i in range(1,len(filenames)): 
    bigarray = numpy.append(bigarray, numpy.load(filenames[i])[numpy.newaxis,...], axis=0); 
+0

非常好的答案,謝謝。 –