mbi*_*nov 3 python arrays numpy
我有以下numpy数组:
foo = np.array([[0.0, 10.0], [0.13216, 12.11837], [0.25379, 42.05027], [0.30874, 13.11784]])
Run Code Online (Sandbox Code Playgroud)
产生:
[[ 0. 10. ]
[ 0.13216 12.11837]
[ 0.25379 42.05027]
[ 0.30874 13.11784]]
Run Code Online (Sandbox Code Playgroud)
如何标准化此数组的Y分量。所以它给了我类似的东西:
[[ 0. 0. ]
[ 0.13216 0.06 ]
[ 0.25379 1 ]
[ 0.30874 0.097]]
Run Code Online (Sandbox Code Playgroud)
rns*_*nso 10
sklearn.preprocessing.MinMaxScaler也可以使用(feature_range=(0, 1)默认):
from sklearn import preprocessing
min_max_scaler = preprocessing.MinMaxScaler()
v = foo[:,1]
v_scaled = min_max_scaler.fit_transform(v)
foo[:,1] = v_scaled
print(foo)
Run Code Online (Sandbox Code Playgroud)
输出:
[[ 0. 0. ]
[ 0.13216 0.06609523]
[ 0.25379 1. ]
[ 0.30874 0.09727968]]
Run Code Online (Sandbox Code Playgroud)
优点是可以缩放到任何范围。
参考此交叉验证链接,如何将数据标准化到0-1范围?,您似乎可以在的最后一列执行最小-最大规格化foo。
v = foo[:, 1] # foo[:, -1] for the last column
foo[:, 1] = (v - v.min()) / (v.max() - v.min())
Run Code Online (Sandbox Code Playgroud)
foo
array([[ 0. , 0. ],
[ 0.13216 , 0.06609523],
[ 0.25379 , 1. ],
[ 0.30874 , 0.09727968]])
Run Code Online (Sandbox Code Playgroud)
执行规范化的另一种方法(由OP建议)是使用sklearn.preprocessing.normalize,其产生的结果略有不同-
from sklearn.preprocessing import normalize
foo[:, [-1]] = normalize(foo[:, -1, None], norm='max', axis=0)
Run Code Online (Sandbox Code Playgroud)
foo
array([[ 0. , 0.2378106 ],
[ 0.13216 , 0.28818769],
[ 0.25379 , 1. ],
[ 0.30874 , 0.31195614]])
Run Code Online (Sandbox Code Playgroud)
我想你想要这个:
foo[:,1] = (foo[:,1] - foo[:,1].min()) / (foo[:,1].max() - foo[:,1].min())
Run Code Online (Sandbox Code Playgroud)
您正尝试仅在第二列上进行 0 到 1 之间的最小-最大缩放。
使用sklearn.preprocessing.minmax_scale, 应该可以轻松解决您的问题。
例如:
from sklearn.preprocessing import minmax_scale
column_1 = foo[:,0] #first column you don't want to scale
column_2 = minmax_scale(foo[:,1], feature_range=(0,1)) #second column you want to scale
foo_norm = np.stack((column_1, column_2), axis=1) #stack both columns to get a 2d array
Run Code Online (Sandbox Code Playgroud)
应该屈服
array([[0. , 0. ],
[0.13216 , 0.06609523],
[0.25379 , 1. ],
[0.30874 , 0.09727968]])
Run Code Online (Sandbox Code Playgroud)
也许您希望两列都在 0 和 1 之间进行最小-最大缩放。在这种情况下,使用:
foo_norm = minmax_scale(foo, feature_range=(0,1), axis=0)
Run Code Online (Sandbox Code Playgroud)
哪个产量
array([[0. , 0. ],
[0.42806245, 0.06609523],
[0.82201853, 1. ],
[1. , 0.09727968]])
Run Code Online (Sandbox Code Playgroud)
注意:不要与将向量的范数(长度)缩放到某个值(通常为 1)的操作混淆,这通常也称为归一化。
| 归档时间: |
|
| 查看次数: |
15714 次 |
| 最近记录: |