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) を事前に知る必要があるため、これは堅牢な実装ではありません。

[] がある Python リストのように、null numpy 配列マトリックスはありますか?

4

2 に答える 2

3

ループ内の numpy 配列への追加は非効率的です。回避できない状況がいくつかあるかもしれませんが、これはその 1 つではないようです。最終的に得られる配列のサイズがわかっている場合は、次のように配列ごとに割り当てることをお勧めします。

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 に答える