将空的numpy数组添加到另一个数组中。

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 列表中我们有 [] 一样?

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


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接