2013-03-17 39 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]),但我会建议针对这一点,提出一个上述方法。