aha*_*jib 44 python numpy normalize
我有一个numpy数组,其中特定行的每个单元格代表一个特征的值.我将它们全部存储在100*4矩阵中.
A B C
1000 10 0.5
765 5 0.35
800 7 0.09
Run Code Online (Sandbox Code Playgroud)
知道我如何规范化这个numpy.array的行,其中每个值介于0和1之间?
我想要的输出是:
A B C
1 1 1
0.765 0.5 0.7
0.8 0.7 0.18(which is 0.09/0.5)
Run Code Online (Sandbox Code Playgroud)
提前致谢 :)
ali*_*i_m 93
如果我理解正确,你想要做的是除以每列中的最大值.您可以使用广播轻松完成此操作.
从您的示例数组开始:
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 ]]
Run Code Online (Sandbox Code Playgroud)
x.max(0)
在第0维度(即行)上取最大值.这将为您提供一个(ncols,)
包含每列最大值的大小向量.然后x
,您可以除以此向量,以便对您的值进行标准化,以便将每列中的最大值缩放为1.
如果x
包含负值,则需要先减去最小值:
x_normed = (x - x.min(0)) / x.ptp(0)
Run Code Online (Sandbox Code Playgroud)
在这里,x.ptp(0)
沿轴0返回"峰 - 峰"(即范围,最大 - 最小).这种标准化还保证每列中的最小值为0.
小智 16
您可以使用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 ]]
Run Code Online (Sandbox Code Playgroud)