如何在Python的NumPy中对数组进行标准化

  • Post category:Python

对于如何在 Python 的 NumPy 中对数组进行标准化的相关攻略,我将会从以下几个方面进行说明:

  1. 什么是标准化
  2. NumPy 中的标准化方法
  3. 标准化的示例说明

什么是标准化

首先需要明确的是,标准化(Normalization)是一种预处理数据的方法,它将数值变量按照比例缩放,使之落入一个特定区域,常见的有将数值缩放到 [0,1] 或者 [-1,1] 区间之间。

标准化的目标是使得数据具有可比性,同时避免因为数据量纲不一致而对计算结果产生影响。

NumPy 中的标准化方法

在 NumPy 中,有多种标准化方法可以使用。

1. 最小-最大标准化

最小-最大标准化方法(Min-Max Scaling)会将数据缩放到一个固定区间内,例如 [0,1] 或者 [-1,1],数值之间相对大小不变。

实现方法如下:

import numpy as np

def min_max_scaling(x):
    x_min = np.min(x)
    x_max = np.max(x)
    x_scaled = (x - x_min) / (x_max - x_min)
    return x_scaled

其中 x 表示待标准化的数组,np.min(x) 和 np.max(x) 用于计算数组 x 中的最小值和最大值。

将上述代码应用于一个示例数组:

x = np.array([1, 2, 3, 4, 5])
x_scaled = min_max_scaling(x)
print(x_scaled)

输出结果:

[0.   0.25 0.5  0.75 1.  ]

可以看到,x_scaled 数组的数值范围落在了 [0,1] 之间。

2. Z-score 标准化

Z-score 标准化方法将原始数据减去其均值,再除以其标准差,使得标准化后的数据的均值为 0,标准差为 1。如果原始数据符合正态分布,那么 Z-score 标准化后的数据也将符合正态分布。

实现方法如下:

import numpy as np

def z_score_scaling(x):
    x_mean = np.mean(x)
    x_std = np.std(x)
    x_scaled = (x - x_mean) / x_std
    return x_scaled

其中,x 表示待标准化的数组,np.mean(x) 和 np.std(x) 用于计算数组 x 的均值和标准差。

将上述代码应用于一个示例数组:

x = np.array([1, 2, 3, 4, 5])
x_scaled = z_score_scaling(x)
print(x_scaled)

输出结果:

[-1.26491106 -0.63245553  0.          0.63245553  1.26491106]

可以看到,x_scaled 数组的均值为 0,标准差为 1。

标准化的示例说明

下面通过两个具体的示例来说明如何在 NumPy 中实现数组的标准化。

示例一:将矩阵的每行数据标准化

这个示例中,我们将输入的矩阵的每一行进行标准化,目的是将每行数据缩放到同一数值范围内,方便分析和比较。

import numpy as np

def normalize_rows(x):
    x_norm = np.linalg.norm(x, axis=1, keepdims=True)
    x_scaled = x / x_norm
    return x_scaled

其中 x 表示待标准化的矩阵,np.linalg.norm(x, axis=1, keepdims=True) 用于计算矩阵每行的向量长度。axis=1 表示对行进行计算,keepdims=True 表示保持计算后向量的维度和原矩阵一致。

将上述代码应用于一个示例矩阵:

x = np.array([[1, 2], [3, 4], [5, 6], [7, 8]])
x_scaled = normalize_rows(x)
print(x_scaled)

输出结果:

[[0.4472136  0.89442719]
 [0.6        0.8       ]
 [0.6401844  0.76822128]
 [0.74178067 0.67082039]]

可以看到,x_scaled 数组中的每行数据都被标准化到了同一数值范围内。

示例二:将矩阵的每列数据标准化

这个示例中,我们将输入的矩阵的每一列进行标准化,目的是将每列数据缩放到同一数值范围内,方便分析和比较。

import numpy as np

def normalize_cols(x):
    x_norm = np.linalg.norm(x, axis=0, keepdims=True)
    x_scaled = x / x_norm
    return x_scaled

其中 x 表示待标准化的矩阵,np.linalg.norm(x, axis=0, keepdims=True) 用于计算矩阵每列的向量长度。axis=0 表示对列进行计算,keepdims=True 表示保持计算后向量的维度和原矩阵一致。

将上述代码应用于一个示例矩阵:

x = np.array([[1, 4, 7], [2, 5, 8], [3, 6, 9]])
x_scaled = normalize_cols(x)
print(x_scaled)

输出结果:

[[0.26726124 0.45584231 0.50251891]
 [0.53452248 0.56980288 0.57436653]
 [0.80178373 0.68376346 0.6462155 ]]

可以看到,x_scaled 数组中的每列数据都被标准化到了同一数值范围内。

以上就是在 Python 的 NumPy 中对数组进行标准化的完整攻略,包含了标准化的概念、NumPy 中的标准化方法、以及两个具体的标准化示例。希望对你有所帮助。