2016-08-19 8 views
0

データセットからデータポイントをペアで抽出しています。ペアは2つのnumpy配列で構成され、それぞれの形状は(3, 30, 30)です。 X1Y1としましょう。次のペアはX2Y2となり、次にX3Y3などとなります。合計ペア数はわからないので、np.appendのようなものを使用する必要があります。特定のフォーマットのnumpy配列を3番目の配列に追加する

>>X1, Y1 = extract_X_and_Y_from_data(data) 
>>pair1 = np.array([X1, Y1]) 
>>pair1.shape 
(2, 3, 30, 30) 
>>list_of_pairs.some_append_function(pair1) 
>>list_of_pairs.shape 
(1, 2, 3, 30, 30) 

>>X2, Y2 = extract_X_and_Y_from_data(data) 
>>pair2 = np.array([X2, Y2]) 
>>list_of_pairs.some_append_function(pair2) 
>>list_of_pairs.shape 
(2, 2, 3, 30, 30) 

...すべてで

>>X50, Y50 = extract_X_and_Y_from_data(data) 
>>pair50 = np.array([X50, Y50]) 
>>list_of_pairs.some_append_function(pair50) 
>>list_of_pairs.shape 
(50, 2, 3, 30, 30) 

すべてが、私は形状(no_of_pairs, 2, 3, 30, 30)のnumpyの配列であることを最終list_of_pairsを必要とする:

だから私のような何かをしたいです。 np.appendは私に(no_of_pairs, 2)を与え続けています。

注:これらはすなわちlist_of_pairs最初は空に最初のペアを追加、最初のインスタンスを実行するように見えることができないためnp.concatenatevstackまたはhstackは、実施するのが難しいです。

ありがとうございます!それだけでリストへのポインタが追加されますので、リストで

+0

'hstack'を使用すると、'(0、2、3、30、30) 'のような正しい形状の空の配列を 'seed'するだけで済みます。 – Julien

+0

o/pの形状の配列、 '(no_of_pairs、2、3、30、30)'で始め、代入値を繰り返しインデックスに入れます。したがって、最初のペアでは、 'out [0,0] = X1、out [0,1] = Y1'; 'out [1,0] = X2、out [1,1] = Y2 'などとなります。 – Divakar

+0

@Divakarペアの数はあらかじめ分かっていません... – Julien

答えて

1

リストに

list_of_pairs = [] # real list 
for data in database: 
    X1, Y1 = extract_X_and_Y_from_data(data) 
    pair1 = np.array([X1, Y1]) 
    list_of_pairs.some_append_function(pair1) 
array5d = np.array(list_of_pairs) 
>> array5d.shape 
(50, 2, 3, 30, 30) 

appendingを追加するには、比較的高速です。 pairアレイはメモリに残ります。

np.array(alist)はあなたに新しいしている次元をより細かく制御できます新しい機能np.stackがあります(np.array([[1,2,3],[4,5,6]])と同じ)新しい次元に

をコンポーネントに参加し、新しい配列を作成します。 stackのファンクションはすべてnp.concatenateと呼びます。それには、誤った名前の(そして誤った)np.appendが含まれます。 concatenateには(接合方向の)一致する寸法が必要です。様々なstacksは全体の次元数を調整するだけです。

関連する問題