Python中通过newaxis()实现数组的归一化操作
在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_value或mean_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中用来对数组的维度进行扩展的函数,可以方便地进行数组的归一化操作。通过对不同维度的归一化操作,我们可以将数组的数据缩放到统一的范围内,方便进行后续的数据处理和分析。
