4

我正在编写功能选择代码。基本上从 featureselection 函数获取输出并将其连接到 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 列表中我们有 []?

4

2 回答 2

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]),但我建议不要这样做,并建议上述方法之一。

于 2013-03-17T18:44:16.330 回答
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
于 2013-03-17T17:16:18.430 回答