2012-04-13 6 views
2

ナンシー初心者はこちら。私は、ニューラルネットワークへの入力を標準化(機能スケーリング、標準化ともいう)しようとしています。私は線形スケーリングを行うと、私が使用している式は:配列とスカラーのナンシー数学?

I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)

Iは、スケーリングされた入力値であり、値IminとImaxは、所望の最小及びスケーリングされた値の最大の範囲であり、Dは、元でありますDminおよびDmaxは元のデータ値の最小および最大範囲です。私は、numpy配列をとり、すべての値が正規化された配列を返すPythonメソッドが必要です。これは私がこれまで考えてきたことです。

def get_normalized_values(array): 
    """I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)""" 
    imin = -1 
    imax = 1 
    dmin = array.amin() 
    dmax = array.amax() 

    normalized = imin + (imax - imin)*(array - dmin)/(dmax - dmin) 

    return normalized 

私の質問はこの作品ですか?または、配列の各要素をループして数学を実行する必要がありますか?配列やスカラーを使って数学をするだけでいいですか?つまり、array - dminは、各値にdminを引いた新しい一時配列を作成しますか?これが適切な用語であるかどうかはわかりませんが、これは「ベクトル化された」アプローチだと思いますか?

更新

がこの場所で配列を変更持っている方法はありますか?それは、配列のコピーを返すのではなく、関数に配列を渡して元の配列を変更させることですか?

+1

このようなものは正常に動作しますが、試してみてください。一つのことは、aminとamaxはちょうどminとmaxでなければならないということです。またはargmin/argmax。 –

答えて

4

私はあなただけmy_array.max()のようにmin()max()への呼び出しであるとの通話amin()amax()を変更する必要があると考えています。

これ以外の場合は、正常に動作するはずです。配列にスカラーを追加するなど、Octave/MatlabのようにNumPyで処理を行うことができ、自動的にすべての要素に操作をマップすることができます。場合によっては、少し異なる構文(例えば、numpy.linalg.dot()の違いを知っていて、2つの配列を掛けるだけのような)が必要な場合もありますが、一般的にこのようなことはあなたが指摘したとおり簡単です。

+0

amin、amax、min、maxの違いは何ですか? – User

+1

私は 'amin()'がNumPyの配列型のメンバ関数であるとは思いません。私はあなたが 'numpy.amin()'を使って軸に沿った最小値を計算し、 'my_array.amin()'がエラーをスローすることを確信しています(NumPy 1.5.1でエラーがスローされます。上のコードをテストしてください)。配列型に対して実装される適切なメソッドは 'my_array.min()'のような 'min()'メソッドです。したがって、あなたが望むなら 'amin'を呼び出すことができますが、配列の名前の後にドット構文で呼び出すことはできません。 – ely

+0

また、小さな個人的な美的好みがあります。私はNumPy関数 'argmin()'を頻繁に使用して最小エントリーのインデックスを取得します。そして、私は 'min'、' argmin'と 'amin'の潜在的な混乱を好きではありません。私は配列型のクラスメソッドであるものだけを使う傾向があり、 'np.some_function(array)'を呼び出すことによって適用される配列操作は避けています。私は 'array.some_function()'に固執しようとしますが、 'amin()'にはそのようなことはありません。 'np.amin(array)'としてしか呼び出せません。 – ely

2

それはPythonの - ちょうど(TM)、それを試してみてください

私は本当に答えを知らないが、見つけるの私の方法は、iPythonターミナルセッションに疑問を貼り付けることであろう。一般的に、私がnumbyでこれをどうやって行うのか疑問に思ったときは、簡単な方法でうまくいきました。

+0

+1してみてください! – unutbu

関連する問題