如何规范化 NumPy 数组,使其值精确介于 0 和 1 之间?
NumPy 是 Python 中用于数值计算的强大库,它提供了一个数组对象,可以高效处理大型数据集。通常,需要规范化 NumPy 数组的值,以确保它们在特定范围内。一种常见的规范化技术是将值缩放到 0 到 1 之间。
在本文中,我们将学习如何规范化 NumPy 数组,使值的范围精确地介于 0 和 1 之间。我们将看到使用 NumPy 实现此目的的不同方法,以及语法和完整示例。
方法
有各种方法或方法,我们可以轻松地规范化 NumPy 数组,使值的范围精确地介于 0 和 1 之间。让我们看看一些常用的方法及其语法和示例 -
方法 1:使用最小-最大规范化
将数组规范化为精确介于 0 和 1 之间的第一种方法是使用最小-最大规范化。它也称为特征缩放,使用数组中的最小值和最大值将值重新缩放到 0 到 1 的范围内。这种方法被广泛使用并且易于实现。
语法
以下是使用最小-最大规范化将数组规范化为精确介于 0 和 1 之间的语法 -
normalized_arr = (arr - min_val) / (max_val - min_val)
示例
在给定的示例中,我们使用最小-最大规范化根据数组中的最小值和最大值将值重新调整为 0 到 1 之间的值。例如,如果我们有一个数组 [10, 4, 5, 6, 2, 8, 11, 20],最小值为 2,最大值为 20。通过从每个元素中减去最小值并将其除以范围(最大值 - 最小值),我们可以获得 0 到 1 之间的归一化值。
#import numpy module import numpy as np #定义具有一些值的数组 my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20]) # 查找数组中的最小值和最大值 my_min_val = np.min(my_arr) my_max_val = np.max(my_arr) # 执行最小-最大归一化 my_normalized_arr = (my_arr - my_min_val) / (my_max_val - my_min_val) 打印(my_normalized_arr)
输出
[0.44444444 0.11111111 0.16666667 0.22222222 0. 0.333333330.5 1. ] ]
方法 2:使用 Z 分数标准化
将数组标准化为精确介于 0 和 1 之间的第二种方法是使用 Z 分数标准化。它也被称为标准化,将值转换为平均值为 0 且标准差为 1。
语法
以下是使用 Z 分数标准化将数组标准化为精确介于 0 和 1 之间的语法 −
mean_val = np.mean(arr) std_val = np.std(arr) normalized_arr = (arr - mean_val) / std_val
示例
在给定的示例中,我们使用 Z 分数标准化通过减去平均值并除以标准差来标准化值。虽然它不能保证值介于 0 和 1 之间,但它通常用于统计分析。例如,对数组 [10, 4, 5, 6, 2, 8, 11, 20] 应用 z 分数标准化。
#导入 numpy 模块 导入 numpy 作为 np #定义具有一些值的数组 my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20]) #计算数组的平均值和标准差 my_mean_val = np.mean(arr) my_std_val = np.std(arr) #执行 z 分数标准化 my_normalized_arr = (my_arr - my_mean_val) / my_std_val print(my_normalized_arr)
输出
[ 0.85564154 -0.34874292 -0.2032739 -0.05780487 -0.63668096 0.14113318 1.00082049 4.38233801]
方法 3:使用重新缩放除法
将数组标准化为精确介于 0 和 1 之间的第三种方法是使用重新缩放除法。当我们心中有一个特定的最大值时,这种方法很有用,如果有,那么我们可以直接将数组的每个元素除以该值,以获得 0 到 1 之间的标准化范围。
语法
以下是使用重新缩放除法将数组标准化为精确介于 0 和 1 之间的语法 -
normalized_arr = arr / max_val
示例
在下面的示例中,我们使用了通过除法重新缩放的方法,该方法允许使用特定的最大值直接缩放数组的值。对于数组 [10, 4, 5, 6, 2, 8, 11, 20] 且选定的最大值是 20,将每个元素除以 20 可得到规范化数组。当需要特定的最大值时,此方法非常有用。
#import numpy module import numpy as np #定义具有某些值的数组 my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20]) #定义最大值 my_max_val = 10 #通过将每个元素除以最大值来执行重新缩放 my_normalized_arr = my_arr / my_max_val print(my_normalized_arr)
输出
[1. 0.4 0.5 0.6 0.2 0.8 1.1 2. ]
方法 4:使用 Sklearn MinMaxScaler
将数组标准化为精确介于 0 和 1 之间的第四种也是最后一种方法是使用 sklearn MinMaxScaler。此方法提供了一种方便的方法来标准化数据,方法是将数据缩放到特定范围,在本例中为 0 到 1 之间。当我们想要保留数据的原始分布,同时确保它在所需范围内时,sklearn MinMaxScaler 方法很有用。
语法
以下是使用 sklearn MinMaxScaler 将数组标准化为精确介于 0 和 1 之间的语法 -
scaler = MinMaxScaler(feature_range=(0, 1)) normalized_arr = scaler.fit_transform(arr.reshape(-1, 1)).flatten()
示例
在给定的示例中,我们使用了 Scikit-learn 的 MinMaxScaler,它提供了一种方便的方法将数组规范化到所需范围,例如 0 到 1。通过将 MinMaxScaler 拟合到数组 [10, 4, 5, 6, 2, 8, 11, 20],然后应用转换方法。
#import numpy module import numpy as np from sklearn.preprocessing import MinMaxScaler #define array with some values my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20]) # 创建 MinMaxScaler 的实例 my_minmax_scaler = MinMaxScaler(feature_range=(0, 1)) # 将数组重塑为列向量并拟合转换数据 my_normalized_arr = my_minmax_scaler.fit_transform(arr.reshape(-1, 1)).flatten() print(my_normalized_arr)
输出
[0.47368421 0.15789474 0.21052632 0.26315789 0.05263158 0.31578947 0.52631579 1. ]
结论
将 NumPy 数组规范化为精确介于 0 和 1 之间是数据预处理任务中的常见要求。在本文中,我们学习了如何将数组标准化为介于 0 和 1 之间的范围。我们看到了实现此标准化的四种不同方法:最小-最大标准化、Z 分数标准化、通过除法重新缩放以及使用 Scikit-learn 的 MinMaxScaler。
最小-最大标准化计算数组中值的范围并将它们重新缩放到范围 [0, 1]。Z 分数标准化通过减去平均值并除以标准差来标准化值。通过除法重新缩放直接将每个元素除以指定的最大值。Scikit-learn 的 MinMaxScaler 提供了一种使用特定范围标准化数组的便捷方法。