版权声明:本文为博主原创文章,未经博主允许不得转载。
在线性代数中,一个向量通过矩阵转换成另一个向量时,原有向量的大小就是向量的范数,这个变化过程的大小就是矩阵的范数。
矩阵的范数
首先假设矩阵的大小为m∗nm∗n,即m行n列。
- 1-范数,又名列和范数。顾名思义,即矩阵列向量中绝对值之和的最大值。
- 2-范数,又名谱范数,计算方法为
矩阵的最大特征值的开平方。
-
-范数,又名行和范数。顾名思义,即矩阵行向量中绝对值之和的最大值。
- F-范数,Frobenius范数,计算方式为矩阵元素的绝对值的平方和再开方。
向量的范数计算方法有以下5种:
- 1-范数,计算方式为向量所有元素的绝对值之和。
- 2-范数,计算方式同欧式距离。
-
-范数,所有向量元素中的最大值。
-
−-范数,所有向量元素中的最小值。
-
-范数,所有向量元素绝对值的p次方和的1/p次幂。
在Python中,我们利用norm函数来计算范数,具体如下:
norm(x, ord=None, axis=None, keepdims=False)是numpy库里linalg现行代数模块中计算矩阵或向量范数的方法。
ord | 矩阵范数 | 向量范数 |
---|---|---|
None | Frobenius norm | 2-norm |
‘fro’ | Frobenius norm | – |
‘nuc’ | nuclear norm 核范数是奇异值的和 | – |
inf | max(sum(abs(x), axis=1)) | max(abs(x)) |
-inf | min(sum(abs(x), axis=1)) | min(abs(x)) |
0 | – | sum(x != 0) |
1 | max(sum(abs(x), axis=0)) | as below |
-1 | min(sum(abs(x), axis=0)) | as below |
2 | 2-norm (largest sing. value) | as below |
-2 | smallest singular value | as below |
other | – |
参数
----------
x : 输入数组,如果axis是None,那么x必须是一维或二维
ord : 可选{非零整数, inf, -inf, ‘fro’, ‘nuc’},具体如上表所示
axis : 可选{整数,2元组, None}
如果“axis”是一个整数,它指定“x”的轴计算向量的范数。如果“axis”是一个二元组,则指定包含二维矩阵的坐标轴,以及这些矩阵的矩阵范数计算。如果“axis”为空,那么是对整体所有的数计算。
keepdims : 布尔值, optional
当 True时, 返回维度为1的结果。
当False时,结果将是根据原始的“x”的维度正确广播。
注意:严格来说,当 ord <= 0 时,不符合数学上的范数公式,但它仍然适用于各种数值目的。
import numpy as np
a = np.arange(12)
print(a)
b = a.reshape((3, 4))
print(b)
print(np.linalg.norm(a))
print(np.linalg.norm(b))
print(np.linalg.norm(b, 'fro'))
print(np.linalg.norm(b, 'nuc'))
print(np.linalg.norm(a, np.inf))
print(np.linalg.norm(a, -np.inf))
print(np.linalg.norm(a, 1))
print(np.linalg.norm(b, np.inf, axis=1))
print(np.linalg.norm(b, -np.inf, axis=0))
print(np.linalg.norm(b, 1))
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
22.4944437584
22.4944437584
22.4944437584
24.3646384993
11.0
0.0
66.0
[ 3. 7. 11.]
[ 0. 1. 2. 3.]
21.0