特定の行の各セルが機能の値を表すnumpy配列があります。それらすべてを100 * 4マトリックスに格納します。
A B C
1000 10 0.5
765 5 0.35
800 7 0.09
各値が0と1の間であるこのnumpy.arrayの行を正規化する方法はありますか?
希望する出力は次のとおりです。
A B C
1 1 1
0.765 0.5 0.7
0.8 0.7 0.18(which is 0.09/0.5)
前もって感謝します :)
私が正しく理解していれば、あなたがしたいことは各列の最大値で割ることです。これは broadcasting を使用して簡単に実行できます。
サンプルの配列から始めます。
import numpy as np
x = np.array([[1000, 10, 0.5],
[ 765, 5, 0.35],
[ 800, 7, 0.09]])
x_normed = x / x.max(axis=0)
print(x_normed)
# [[ 1. 1. 1. ]
# [ 0.765 0.5 0.7 ]
# [ 0.8 0.7 0.18 ]]
x.max(0)
は、0番目の次元(行)で最大値を取ります。これにより、各列の最大値を含むサイズ(ncols,)
のベクトルが得られます。次に、各列の最大値が1にスケーリングされるように値を正規化するために、x
をこのベクトルで除算できます。
x
に負の値が含まれる場合、最初に最小値を減算する必要があります。
x_normed = (x - x.min(0)) / x.ptp(0)
ここで、x.ptp(0)
は、軸0に沿って「ピークツーピーク」(つまり、範囲、最大-最小)を返します。この正規化は、各列の最小値が0になることも保証します。
Sklearn.preprocessingを使用できます:
from sklearn.preprocessing import normalize
data = np.array([
[1000, 10, 0.5],
[765, 5, 0.35],
[800, 7, 0.09], ])
data = normalize(data, axis=0, norm='max')
print(data)
>>[[ 1. 1. 1. ]
[ 0.765 0.5 0.7 ]
[ 0.8 0.7 0.18 ]]