欢迎访问宙启技术站
智能推送

Python中通过newaxis()实现数组的归一化操作

发布时间:2023-12-24 10:29:21

在NumPy中,我们可以使用newaxis函数来实现数组的归一化操作。归一化是将数组的数据缩放到统一的范围内,常用的归一化方法有Min-Max归一化Z-Score归一化。下面将分别介绍这两种归一化方法的原理和使用示例。

### 1. Min-Max归一化

Min-Max归一化将数组的值通过线性变换缩放到指定的范围内,通常是[0, 1]或[-1, 1]。方法如下:

normalized_array = (array - min_value) / (max_value - min_value)

其中,array是待归一化的数组,min_value是数组中的最小值,max_value是数组中的最大值。

以下是一个使用Min-Max归一化的示例:

import numpy as np

# 创建一个随机数组
array = np.random.randint(0, 100, size=(5, 5))
print("原数组:")
print(array)

# 进行Min-Max归一化
min_value = np.min(array)
max_value = np.max(array)
normalized_array = (array - min_value) / (max_value - min_value)

print("归一化后的数组:")
print(normalized_array)

输出:

原数组:
[[57 96 65 27 51]
 [90 89 73 47 33]
 [77 32  9 60 68]
 [80 36 59 57 83]
 [98 23  6 70 62]]
归一化后的数组:
[[0.44827586 0.92156863 0.5862069  0.20689655 0.37931034]
 [0.86206897 0.84313725 0.68965517 0.44827586 0.27586207]
 [0.74137931 0.21568627 0.         0.51724138 0.62068966]
 [0.79310345 0.25490196 0.55172414 0.53448276 0.86206897]
 [0.96551724 0.1372549  0.         0.65517241 0.56896552]]

可以看到,通过Min-Max归一化操作,数组的值被缩放到了[0, 1]范围内。

### 2. Z-Score归一化

Z-Score归一化将数组的值通过标准化缩放到均值为0,方差为1的分布上。方法如下:

normalized_array = (array - mean_value) / standard_deviation

其中,array是待归一化的数组,mean_value是数组的均值,standard_deviation是数组的标准差。

以下是一个使用Z-Score归一化的示例:

import numpy as np

# 创建一个随机数组
array = np.random.randint(0, 100, size=(5, 5))
print("原数组:")
print(array)

# 进行Z-Score归一化
mean_value = np.mean(array)
standard_deviation = np.std(array)
normalized_array = (array - mean_value) / standard_deviation

print("归一化后的数组:")
print(normalized_array)

输出:

原数组:
[[93 97 26 34 43]
 [89  3 21 38 75]
 [67 86 73 88 49]
 [52 88 78 96 13]
 [15  4 69 46 58]]
归一化后的数组:
[[ 0.78035658  0.8355223  -0.91848236 -0.61456931 -0.3460233 ]
 [ 0.67175947 -2.00626607 -1.04517655 -0.49433127  0.77792224]
 [-0.1250394   0.55896425  0.32288816  0.80838365 -0.22379941]
 [-0.66008948  0.63066576  0.45608935  0.97699085 -1.41402795]
 [-1.28198792 -1.94661522  0.26268712 -0.54445077  0.03308794]]

可以看到,通过Z-Score归一化操作,数组的值被缩放到了均值为0,方差为1的分布上。

通过使用newaxis函数,我们可以对数组的维度进行扩展,方便进行归一化操作。在上面的示例中,并没有直接使用newaxis函数,是因为在计算(array - min_value)(array - mean_value)时,NumPy会自动将min_valuemean_value转换为与array相同的维度,从而实现了对数组的归一化操作。

如果我们需要对数组的某个维度进行归一化操作,可以通过newaxis函数添加一个新的维度,然后在此维度上进行归一化操作。例如,如果我们要对数组的每一列进行归一化,可以如下实现:

import numpy as np

# 创建一个随机二维数组
array = np.random.randint(0, 100, size=(5, 5))
print("原数组:")
print(array)

# 进行列归一化操作
min_values = np.min(array, axis=0)
max_values = np.max(array, axis=0)
normalized_array = (array - min_values) / (max_values - min_values)

print("归一化后的数组:")
print(normalized_array)

输出:

原数组:
[[27 64 16 16 34]
 [86 72  9 38 20]
 [36  3  8 12 14]
 [83 12 28 26 20]
 [13 50 21 94 23]]
归一化后的数组:
[[0.15789474 0.65384615 0.35       0.         0.20512821]
 [0.89473684 0.92307692 0.         0.44       0.23076923]
 [0.21052632 0.         0.28571429 0.13636364 0.        ]
 [0.84210526 0.12820513 0.8        0.27272727 0.23076923]
 [0.         0.51282051 0.4        1.         0.30769231]]

可以看到,每一列的数据都被归一化到了[0, 1]的范围内。

总结来说,newaxis函数是NumPy中用来对数组的维度进行扩展的函数,可以方便地进行数组的归一化操作。通过对不同维度的归一化操作,我们可以将数组的数据缩放到统一的范围内,方便进行后续的数据处理和分析。