开始之前
在处理机器学习问题中,我们常常会碰到范数,这里我将通过code给大家讲解一下范数。
范式代码:np.linalg.norm(x, ord=None, axis=None)
其中:
(1)linalg=linear(线性)+algebra(代数),norm表示范数
(2)x代表矩阵,ord为范数类型
参数 | 范数类型 |
---|---|
ord=2或None | 二范数 |
ord=1 | 一范数 |
ord=np.inf | 无穷范数 |
当ord=2表示求特征值,然后求最大特征值的算术平方根,当ord=1表示求列和的最大值,当ord=∞表示求行和的最大值。
【注】严格来讲,L0不属于范数,其表示向量中所有非零元素的个数,此处不予讲解。
(3)axis为处理类型:当axis=1时表示按行向量处理,求多个行向量的范数。当axis=0时表示按列向量处理,求多个列向量的范数。当axis=None表示矩阵范数
前提准备
Jupyter notebook 或 Pycharm
火狐浏览器或谷歌浏览器
win7或win10电脑一台
代码如下:
import numpy as np
A = np.array([[3,-4],[-6,5]])
print(A)
ret_all = np.linalg.norm(A,ord=None)
print(ret_all) #ret_all返回的是2范数(平方和开根号)的值
ret_row = np.linalg.norm(A,ord=None,axis=1)
print(ret_row) #ret_row返回的是逐行2范数(平方和开根号)的值
ret_colume = np.linalg.norm(A,ord=None,axis=0)
print(ret_colume) #ret_row返回的是逐列2范数(平方和开根号)的值
ret_inf_max = np.linalg.norm(A,ord=np.Inf)
print(ret_inf_max) #ret_inf_max返回的无穷范数(元素是逐行中元素绝对值的和最大)
ret_inf_max_row = np.linalg.norm(A,ord=np.Inf,axis=1)
print(ret_inf_max_row) #ret_inf_max_row返回的是无穷范数每行元素的绝对值的最大值
ret_inf_max_colume = np.linalg.norm(A,ord=np.Inf,axis=0)
print(ret_inf_max_colume) #ret_inf_max_row返回的是无穷范数每列元素的绝对值的最大值
ret_inf_min = np.linalg.norm(A,ord=-np.Inf)
print(ret_inf_min) #ret_inf_min返回的无穷范数(元素是逐行中元素绝对值最小的值)
B = np.array([[100,-4],[-6,5]])
print(B)
ret_one = np.linalg.norm(B,ord=1)
print(ret_one) #ret_one返回的是求列的元素绝对值和的最大值
ret_one_row = np.linalg.norm(B,ord=1,axis=1)
print(ret_one_row) #ret_one_row返回的是逐行求行的元素绝对值和
ret_one_colume = np.linalg.norm(B,ord=1,axis=0)
print(ret_one_colume) #ret_one_row返回的是逐列求列的元素绝对值和
效果: