📅  最后修改于: 2023-12-03 15:07:08.901000             🧑  作者: Mango
在数学中,矩阵范数是一个将矩阵映射到实数的函数。通俗来说,矩阵范数可以认为是一种衡量矩阵大小和变化的度量方法。在数值分析和线性代数中,矩阵范数是一个核心概念,广泛应用于矩阵理论、矩阵计算和控制系统理论等领域。
在Python中,我们可以使用Numpy库提供的norm函数来计算矩阵范数或向量范数。
向量范数是一个函数,将向量映射到实数,具体来说,向量范数是一个描述向量大小的度量方法。在Numpy中,我们可以使用norm函数来计算向量的范数。norm函数的基本语法如下:
numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)
其中参数的含义如下:
import numpy as np
x = np.array([1, -2, 3])
print(np.linalg.norm(x, ord=1))
# 输出:6.0
import numpy as np
A = np.array([[1, 2], [3, 4]])
print(np.linalg.norm(A, ord='fro'))
# 输出:5.477225575051661
矩阵范数是一个将矩阵映射到实数的函数,衡量一个矩阵的大小和变化程度。下面介绍八种矩阵范数:
矩阵的一范数是其所有列向量的绝对值之和的最大值。
矩阵的二范数是其所有特征值的平方和的平方根。
矩阵的无穷范数是其所有行向量的绝对值之和的最大值。
矩阵的Frobenius范数是其所有元素的平方和的平方根。
矩阵的列和范数是其所有列向量的绝对值之和的最大值。
矩阵的行和范数是其所有行向量的绝对值之和的最大值。
矩阵的最大值范数是其所有元素的绝对值之和的最大值。
矩阵的秩是其非零特征值的个数,也可以说是其奇异值分解中非零奇异值的个数。
下面分别给出计算每种矩阵范数的公式和代码实现。
矩阵的列范数是其所有列向量的绝对值之和的最大值。
计算公式:$||A||1=max{j=1...n}\sum_{i=1}^{m}|a_{i,j}|$
代码实现:
import numpy as np
A = np.array([[1,-2,3],[0,1,3],[3,-1,8]])
print(np.linalg.norm(A, ord=1))
# 输出:12.0
矩阵的谱范数是其所有特征值的平方和的平方根。
计算公式:$||A||2=\sqrt{\lambda{max}(A^TA)}$
代码实现:
import numpy as np
A = np.array([[1,-2,3],[0,1,3],[3,-1,8]])
print(np.linalg.norm(A, ord=2))
# 输出:12.806248474865697
矩阵的行范数是其所有行向量的绝对值之和的最大值。
计算公式:$||A||{\infty}=max{i=1...m}\sum_{j=1}^{n}|a_{i,j}|$
代码实现:
import numpy as np
A = np.array([[1,-2,3],[0,1,3],[3,-1,8]])
print(np.linalg.norm(A, ord=np.inf))
# 输出:12.0
矩阵的Frobenius范数是其所有元素的平方和的平方根。
计算公式:$||A||F=\sqrt{\sum{i=1}^{m}\sum_{j=1}^{n}|a_{i,j}|^2}$
代码实现:
import numpy as np
A = np.array([[1,-2,3],[0,1,3],[3,-1,8]])
print(np.linalg.norm(A, ord='fro'))
# 输出:12.165525060596439
矩阵的列和范数是其所有列向量的绝对值之和的最大值。
计算公式:$||A||{1,\infty}=max{j=1...n}\sum_{i=1}^{m}|a_{i,j}|$
代码实现:
import numpy as np
A = np.array([[1,-2,3],[0,1,3],[3,-1,8]])
print(np.linalg.norm(A, ord=(1,np.inf)))
# 输出:15.0
矩阵的行和范数是其所有行向量的绝对值之和的最大值。
计算公式:$||A||{\infty,1}=max{i=1...m}\sum_{j=1}^{n}|a_{i,j}|$
代码实现:
import numpy as np
A = np.array([[1,-2,3],[0,1,3],[3,-1,8]])
print(np.linalg.norm(A, ord=(np.inf,1)))
# 输出:12.0
矩阵的最大值范数是其所有元素的绝对值之和的最大值。
计算公式:$||A||{\infty,\infty}=max{i=1...m}\sum_{j=1}^{n}|a_{i,j}|$
代码实现:
import numpy as np
A = np.array([[1,-2,3],[0,1,3],[3,-1,8]])
print(np.linalg.norm(A, ord=(np.inf,np.inf)))
# 输出:15.0
矩阵的秩是其非零特征值的个数,也可以说是其奇异值分解中非零奇异值的个数。
代码实现:
import numpy as np
A = np.array([[1,-2,3],[0,1,3],[3,-1,8]])
print(np.linalg.matrix_rank(A))
# 输出:3