2013-03-17 37 views
4

我正在寫一個特徵選擇碼被附加。基本上得到從featureselection函數的輸出,並將其級聯到numpy的陣列數據空numpy的陣列向

data=np.zeros([1,4114]) # put feature length here 
for i in range(1,N): 
    filename=splitpath+str(i)+'.tiff' 
    feature=featureselection(filename) 
    data=np.vstack((data, feature)) 

data=data[1:,:] # remove the first zeros row 

然而,這不是一個健壯的實現,因爲我需要知道特徵長度(4114)預先。

是否有任何空numpy的陣列矩陣,就像在Python列表,我們有[]?

回答

1

如果您不希望創建第一個陣列之前承擔的大小,你可以使用延遲初始化。

data = None 
for i in range(1,N): 
    filename=splitpath+str(i)+'.tiff' 
    feature=featureselection(filename) 
    if data is None: 
     data = np.zeros((0, feature.size)) 
    data = np.vstack((data, feature)) 

if data is None: 
    print 'no features' 
else: 
    print data.shape 
3

追加到循環中的numpy的陣列是低效的,可能有一些情況下,當無法避免,但似乎並沒有成爲他們中的一個。如果你知道你會落得數組的大小,這是最好的只是每個分配的陣列,這樣的事情:

data = np.zeros([N, 4114]) 
for i in range(1, N): 
    filename = splitpath+str(i)+'.tiff' 
    feature = featureselection(filename) 
    data[i] = feature 

有時候你不知道最後的數組的大小。有幾種方法來處理這種情況,但最簡單的可能是使用的臨時列表,像:

data = [] 
for i in range(1,N): 
    filename = splitpath+str(i)+'.tiff' 
    feature = featureselection(filename) 
    data.append(feature) 

data = np.array(data) 

只是爲了完整性,還可以做data = np.zeros([0, 4114]),但我會建議針對這一點,提出一個上述方法。