NumPy数组的最小最大正规化

2024-05-10 11:56:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有以下numpy数组:

foo = np.array([[0.0, 10.0], [0.13216, 12.11837], [0.25379, 42.05027], [0.30874, 13.11784]])

结果是:

[[  0.       10.     ]
 [  0.13216  12.11837]
 [  0.25379  42.05027]
 [  0.30874  13.11784]]

如何规范化此数组的Y分量。所以它给了我类似的东西:

[[  0.       0.   ]
 [  0.13216  0.06 ]
 [  0.25379  1    ]
 [  0.30874  0.097]]

Tags: numpyfoonp数组规范化array分量
3条回答

我想你想要这个:

foo[:,1] = (foo[:,1] - foo[:,1].min()) / (foo[:,1].max() - foo[:,1].min())

参照这个交叉验证的链接How to normalize data to 0-1 range?,看起来您可以对foo的最后一列执行最小最大规范化。

v = foo[:, 1]   # foo[:, -1] for the last column
foo[:, 1] = (v - v.min()) / (v.max() - v.min())

foo

array([[ 0.        ,  0.        ],
       [ 0.13216   ,  0.06609523],
       [ 0.25379   ,  1.        ],
       [ 0.30874   ,  0.09727968]])

执行标准化的另一个选项(如OP所建议的)是使用sklearn.preprocessing.normalize,这会产生稍微不同的结果-

from sklearn.preprocessing import normalize
foo[:, [-1]] = normalize(foo[:, -1, None], norm='max', axis=0)

foo

array([[ 0.        ,  0.2378106 ],
       [ 0.13216   ,  0.28818769],
       [ 0.25379   ,  1.        ],
       [ 0.30874   ,  0.31195614]])

也可以使用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)

输出:

[[ 0.          0.        ]
 [ 0.13216     0.06609523]
 [ 0.25379     1.        ]
 [ 0.30874     0.09727968]]

优点是可以扩展到任何范围。

相关问题 更多 >