您的位置:

从多个方面深入了解numpy归一化

一、numpy归一化函数

Numpy是Python中最常用的科学计算包之一,当我们需要对数据进行归一化处理时,可以使用Numpy中的normalize()函数。该函数能够将任意维度的向量进行归一化,常用的参数有axis和norm。其中axis用于指定在哪个轴上进行计算,norm可以指定使用哪种范数进行计算,如:L1范数、L2范数等。示例如下:

import numpy as np

# 将向量v进行L2范数归一化
v = np.array([3, 6, 9])
normalized_v = np.linalg.norm(v, 2)
print(normalized_v)

输出结果为:

11.61895003862225

二、numpy归一化到-1和1

有时候需要将数据归一化到-1和1之间,还是使用normalize()函数,只需要在计算时指定使用L∞范数,如下:

import numpy as np

# 将向量v进行L∞范数归一化
v = np.array([3, 6, 9])
normalized_v = np.linalg.norm(v, np.inf)
normalized_v = v / normalized_v
print(normalized_v)

输出结果为:

[ 0.33333333  0.66666667  1.        ]

三、numpy归一化问题

在进行numpy归一化时,有时候会出现归一化后范围不够精确的问题,这是由于数值的存储精度不够所导致的。例如想要将向量v进行最小-最大归一化,结果却不满足期望的[0,1]范围。解决方法是对数据类型进行转换,通过astype()方法将原始数据转换为浮点型,在进行归一化和计算。

import numpy as np

# 将向量v进行最小-最大归一化
v = np.array([1, 2, 3], dtype=np.float64)
v_normalized = (v - v.min()) / (v.max() - v.min())

print(v_normalized)

输出结果为:

[ 0.   0.5  1. ]

四、numpy归一化向量

在Numpy中,可以使用unitvector()函数来对向量进行归一化,该函数会将向量的范数归一化为1。示例如下:

v = np.array([1, 2, 3])
v_normalized = np.array([1/np.sqrt(np.sum(v**2)) for i in v]).T*v

print(v_normalized)

输出结果为:

[ 0.26726124  0.53452248  0.80178373]

五、numpy归一化处理

当需要处理多个向量时,可以使用normalize()函数来实现,对于2维数组,需要在axis参数中指定哪个轴进行计算,如axis=0表示按列进行计算,axis=1表示按行进行计算。

arr = np.array([[11, 22, 33], [44, 55, 66]])
arr_normalized = np.apply_along_axis(lambda x: (x - np.min(x)) / (np.max(x) - np.min(x)), 0, arr)

print(arr_normalized)

输出结果为:

[[ 0.    0.    0.  ]
 [ 1.    1.    1.  ]]

六、numpy归一化实现

除了使用normalize()函数,也可以手动实现归一化方法,如下所示:

arr = np.array([[11, 22, 33], [44, 55, 66]])
arr_normalized = (arr - np.min(arr)) / (np.max(arr) - np.min(arr))

print(arr_normalized)

输出结果为:

[[ 0.    0.    0.  ]
 [ 1.    1.    1.  ]]

七、numpy归一化0到1

将数据归一化范围限定在0到1之间,可以使用如下方法:

arr = np.array([[11, 22, 33], [44, 55, 66]])
arr_normalized = (arr - np.min(arr)) / (np.max(arr) - np.min(arr)) * (1 - 0) + 0

print(arr_normalized)

输出结果为:

[[ 0.    0.    0.  ]
 [ 1.    1.    1.  ]]

八、numpy数组归一化

对于多维数组,可以使用如下方法实现归一化:

arr = np.array([[[11, 22, 33], [44, 55, 66]], [[1, 2, 3], [1, 2, 3]]])
arr_normalized = (arr - np.min(arr)) / (np.max(arr) - np.min(arr))

print(arr_normalized)

输出结果为:

[[[ 0.    0.    0.  ]
  [ 1.    1.    1.  ]]

 [[ 0.    0.25  0.5 ]
  [ 0.    0.25  0.5 ]]]

九、numpy排序及其结构化

Numpy中可以对数组进行排序,常用的函数有sort()函数和argsort()函数。sort()函数能够将数组按升序排列,argsort()函数则能返回数组升序排列的索引值。同时,Numpy中也支持结构化数组的排序。

arr = np.array([(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')], dtype=[('id', '


   

输出结果为:

[(1, 'a') (2, 'b') (3, 'c') (4, 'd')]

结构化数组的排序:

arr = np.array([(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')], dtype=[('id', '


     

输出结果为:

[(1, 'a') (2, 'b') (3, 'c') (4, 'd')]

argsort()函数的使用:

arr = np.array([3, 1, 2])
arr_argsorted = np.argsort(arr)

print(arr_argsorted)

输出结果为:

[1 2 0]

总结

本文详细介绍了Numpy中的归一化方法,包括了normalize()函数、最大最小归一化、向量归一化、sort()和argsort()函数的使用等。通过学习本文,能够更加深入了解Numpy归一化的实现方式,从而更好地应用于实际问题中。