Python 如何将NumPy数组归一化,使其值范围正好在0和1之间

Python 如何将NumPy数组归一化,使其值范围正好在0和1之间

NumPy是Python中用于数值计算的强大库,提供了一个数组对象用于高效处理大型数据集。通常,需要将NumPy数组的值归一化,以确保它们在特定范围内。一种常见的归一化技术是将值缩放到0和1之间。

在本文中,我们将学习如何将NumPy数组归一化,使其值范围正好在0和1之间。我们将看到可以使用NumPy实现这一目标的不同方法,以及语法和完整示例。

方法

有多种方法可以轻松将NumPy数组归一化,使其值范围正好在0和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。通过从每个元素中减去最小值,并将其除以范围(max – min),我们可以获得在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.        ] ]

方法二:使用Z-score标准化

将数组标准化到0和1之间的第二种方法是使用Z-score标准化。它也被称为标准化,将值转换为具有0均值和1标准差的形式。

语法

以下是使用Z-score标准化将数组标准化到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分数归一化。

#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]

方法三:使用重新缩放除法

将数组标准化到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],然后应用transform方法。

#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-score归一化、通过除法进行重新缩放以及使用Scikit-learn的MinMaxScaler。

最小-最大归一化计算数组中的值的范围,并将其重新缩放到[0, 1]的范围内。Z-score归一化通过减去均值并除以标准差来标准化值。通过除法进行重新缩放直接将每个元素除以指定的最大值。Scikit-learn的MinMaxScaler提供了一种方便的方式来使用特定范围对数组进行归一化。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程