2017-11-02 7 views
-1

トレーニングセット の形状を「正規化」して、それらをバニラニューラルネットに供給できるようにしようとしています。トレーニングデータのマトリクスの整形と平均化

入力は常に機能 を表す「チャネル」/列の同じ数を有するが、与えられた「Y」

の行の様々な数を取ることができるPythonやnumpyのまたは他のユーティリティがありました入力としてフロートの 寸法(M、N)の行列と(M、O)の所定のサイズに引き伸ばす場合、O> N

例の平均値を含む新しい形状throughtout行を挿入することにより: I形状の配列(4,4)がありますが、配列は(7,4)

[ 
[1,1,1,1], 
[2,2,2,2], 
[1,1,1,1], 
[4,4,4,4] 
] 

が挿入された行は 前のものと 任意のアイデア次々間で平均されている

[ 
[1,1,1,1], 
[1.5,1.5,1.5,1.5], 
[2,2,2,2], 
[1.5,1.5,1.5,1.5], 
[1,1,1,1], 
[2.5,2.5,2.5,2.5], 
[4,4,4,4] 
] 

になるのでしょうか?

+0

'4,7'ではありませんが、' 7,4'。 1D補間を試しましたか? – Divakar

+0

なぜこれを正規化しようとしているのですか? 2dデータですか、それともトレーニングサンプルが必要ですか? – user2699

+0

記録されているデータチャネルは、示されているように、単純な平均として隣接する行にのみ関連しています。必要なのは、一度に複数の行を挿入することなく、示されているように平均をとることによって、任意の数の行を含む配列で終わることです。 1つの行を追加する必要がある場合は、配列の中央付近に行を挿入することを選択します。多くの行を追加する必要がある場合は、必要な数の行に達するまで、既存の行数の50%以下を一度に追加して繰り返します。これが要件です。 – Toast

答えて

0

insert_row(ar、positions)を呼び出す必要があります。arは、行を挿入する2次元配列で、positionは位置のリストです。行が挿入された配列が返されます。コードの下
試してみてください。

import numpy as np 

ar = [ 
[1,1,1,1], 
[2,2,2,2], 
[1,1,1,1], 
[4,4,4,4] 
] 


def insert_row(ar,positions): 
    ar = np.array(ar) 
    v = ar 
    count = 0 
    for i in positions: 
      a = np.add(ar[i,:],ar[i+1,:])/2 
      v = np.vstack([v[0:i+count+1,:],a,v[i+count+1:,:]]) 
      count+=1 
    return v 

出力:

print(insert_row(ar, [1,2])) 

    [[ 1. 1. 1. 1. ] 
    [ 2. 2. 2. 2. ] 
    [ 1.5 1.5 1.5 1.5] 
    [ 1. 1. 1. 1. ] 
    [ 2.5 2.5 2.5 2.5] 
    [ 4. 4. 4. 4. ]] 

print(insert_row(ar, [0])) 

[[ 1. 1. 1. 1. ] 
[ 1.5 1.5 1.5 1.5] 
[ 2. 2. 2. 2. ] 
[ 1. 1. 1. 1. ] 
[ 4. 4. 4. 4. ]] 
+0

ありがとう@jimidimeは、この種の機能がすでに多くのPythonライブラリの1つに存在していたと考えていました。希望の次元に到達するために挿入する必要がある行の数に応じて、新しい行と平均を挿入する場所について上記のコメントを参照してください。 – Toast

+0

@Toastがあなたの要件としてコードを更新しました。 – jimidime

関連する問題