如何将 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

#define array with some values
my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20])

# Find the minimum and maximum values in the array
my_min_val = np.min(my_arr)
my_max_val = np.max(my_arr)

# Perform min-max normalization
my_normalized_arr = (my_arr - my_min_val) / (my_max_val - my_min_val)
print(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 之间,但它通常用于统计分析。例如,将 z 分数标准化应用于数组 [10, 4, 5, 6, 2, 8, 11, 20]。

#import numpy module
import numpy as np

#define array with some values
my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20])

# Calculate the mean and standard deviation of the array
my_mean_val = np.mean(arr)
my_std_val = np.std(arr)

# Perform z-score normalization
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

#define array with some values
my_arr = np.array([10, 4, 5, 6, 2, 8, 11, 20])

#define the max value
my_max_val = 10

# Perform rescaling by dividing each element by the maximum value
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])

# Create an instance of MinMaxScaler
my_minmax_scaler = MinMaxScaler(feature_range=(0, 1))

# Reshape the array to be a column vector and fit-transform the data
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 提供了一种使用特定范围标准化数组的便捷方法。

更新于: 2023 年 8 月 10 日

3K+ 次查看

开启你的 职业生涯

通过完成课程获得认证

开始学习
广告