要附加的空numpy数组

时间:2013-03-17 16:16:40

标签: python numpy

我正在编写功能选择代码。基本上从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)。

是否有任何null numpy数组矩阵,就像在Python列表中我们有[]?

2 个答案:

答案 0 :(得分: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]),但我建议不要这样做并提出上述方法之一。

答案 1 :(得分: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