如何将 numpy 数组中的值标准化为 0 到 1 之间
要将 NumPy 数组的值标准化为 0 到 1 之间,可以使用以下方法之一:
方法一:使用NumPy
import numpy as np x_norm = (x-np. min (x))/(np. max (x)-np. min (x))
方法2:使用Sklearn
from sklearn import preprocessing as pre x = x. reshape (-1, 1) x_norm = pre. MinMaxScaler (). fit_transform (x)
两种方法都假设x是要标准化的 NumPy 数组的名称。
以下示例展示了如何在实践中使用每种方法。
示例 1:使用 NumPy 标准化值
假设我们有以下 NumPy 数组:
import numpy as np
#create NumPy array
x = np. array ([13, 16, 19, 22, 23, 38, 47, 56, 58, 63, 65, 70, 71])
我们可以使用以下代码将数组中的每个值标准化为 0 到 1 之间:
#normalize all values to be between 0 and 1
x_norm = (x-np. min (x))/(np. max (x)-np. min (x))
#view normalized array
print (x_norm)
[0. 0.05172414 0.10344828 0.15517241 0.17241379 0.43103448
0.5862069 0.74137931 0.77586207 0.86206897 0.89655172 0.98275862
1. ]
NumPy 数组中的每个值都已标准化为 0 到 1 之间。
它是这样工作的:
数据集中的最小值为 13,最大值为 71。
为了标准化13的第一个值,我们将应用之前共享的公式:
- z i = ( xi – 最小值(x)) / (最大值(x) – 最小值(x)) = (13 – 13) / (71 – 13) = 0
为了标准化16的第二个值,我们将使用相同的公式:
- z i = ( xi – 最小值(x)) / (最大值(x) – 最小值(x)) = (16 – 13) / (71 – 13) = 0.0517
为了标准化第三个值19 ,我们将使用相同的公式:
- z i = ( xi – 最小值(x)) / (最大值(x) – 最小值(x)) = (19 – 13) / (71 – 13) = 0.1034
我们使用相同的公式将原始 NumPy 数组中的每个值标准化为 0 到 1 之间。
示例2:使用sklearn标准化值
再次假设我们有以下 NumPy 数组:
import numpy as np
#create NumPy array
x = np. array ([13, 16, 19, 22, 23, 38, 47, 56, 58, 63, 65, 70, 71])
我们可以使用sklearn的MinMaxScaler()函数将数组中的每个值标准化为 0 到 1 之间:
from sklearn import preprocessing as pre
#reshape array so that it works with sklearn
x = x. reshape (-1, 1)
#normalize all values to be between 0 and 1
x_norm = pre. MinMaxScaler (). fit_transform (x)
#view normalized array
print (x_norm)
[[0. ]
[0.05172414]
[0.10344828]
[0.15517241]
[0.17241379]
[0.43103448]
[0.5862069]
[0.74137931]
[0.77586207]
[0.86206897]
[0.89655172]
[0.98275862]
[1. ]]
NumPy 数组中的每个值都已标准化为 0 到 1 之间。
请注意,这些归一化值与使用先前方法计算的值相匹配。
其他资源
以下教程解释了如何在 NumPy 中执行其他常见任务:
如何对 NumPy 数组中的元素进行排序
如何从 NumPy 数组中删除重复元素
如何找到 NumPy 数组中出现次数最多的值