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 を引いた新しい一時配列を作成しますか? これが正しい用語かどうかはわかりませんが、これは「ベクトル化された」アプローチだと思いますか?

アップデート

これで配列を変更する方法はありますか? つまり、配列のコピーを返すのではなく、関数に配列を取り、元の配列を変更させますか?

4

2 に答える 2

4

呼び出しを変更し、のようにamin()amax()を呼び出すだけにする必要があると思います。min()max()my_array.max()

そうでなければ、これはうまくいくはずです。NumPy では、スカラーを配列に追加するなど、Octave/Matlab と同じように行うことができ、操作をすべての要素にマップすることを自動的に認識します。場合によっては、わずかに異なる構文が必要になる場合があります (2 つの配列の違いを知ってnumpy.linalg.dot()乗算するだけの場合など) が、一般的に、このようなことは、あなたが示したのと同じくらい簡単です。

于 2012-04-13T21:25:38.537 に答える
2

Python です - 試してみてください (tm)

答えは本当にわかりませんが、答えを見つける方法は、質問を iPython ターミナル セッションに貼り付けることです。一般的に、このようなことをnumbyで行う方法を疑問に思ったときはいつでも、簡単な方法でうまくいきました。

于 2012-04-13T21:24:28.507 に答える