我正在编写功能选择代码。基本上从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列表中我们有[]?
答案 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