2016-06-20 11 views
1

私は、L2ノルム(単位長)を使用してnumpy行列の行を正規化しようとしています。numpy行列で行を正規化する

私はそれをするときに問題が発生しています。次のように私の行列「b」を仮定し

は次のとおりです。

enter image description here

今では正常に動作し、以下のように私は、最初の行の正規化を行うとき。

enter image description here

しかし、私はそれは私にすべてゼロを与え、次のようにすべての行を反復処理と同じ行列Bを変換してそれを実行してみてください。

なぜそれが起こっているのか、どのように正しい正規化を得るのですか。

各行を繰り返し処理することなく、行列を高速化する方法はありますか。私はsci-kitを使って正規化機能を学びたくない。

おかげ

enter image description here

+1

try: - __future__インポート部門 –

+3

コードブロックにコードを入れてください。画像を使用しないでください。コードをコピーして実行することはできません。 – cel

+1

@Shubham Sharma:Python2を使っている場合はそうするのが良い習慣ですが、 'from __future__ import division'はこのケースでは役に立たないと思います(Python3を使用している場合は、まったく無視します)。また、 'future'ではなく' __future__'であることに注意してください。 – Julien

答えて

2

は問題が故に、あなたが行ごとに記入する際bnumpyが自動的intにあなたの計算(float)の結果を変換し、そのintを入力しているという事実から来ていますゼロ。それを回避する1つの方法は、タイプのb0.,1.などを使用して定義するか、定義に.astype(float)を追加することです。

これもfloat最初に変換する必要はありません一度で計算を行うに動作するはず:、

b = b/np.linalg.norm(b, axis=1, keepdims=True) 

あなたは配列全体を再定義するのではなく一つ一つの行を変更しているので、これは動作しますがnumpyはそれをfloatにするのに十分なほど巧妙です。

関連する問題