📜  函数用于计算八种不同的矩阵范数之一或 Numpy 中的向量范数之一 (1)

📅  最后修改于: 2023-12-03 15:07:08.901000             🧑  作者: Mango

函数用于计算八种不同的矩阵范数之一或 Numpy 中的向量范数之一

在数学中,矩阵范数是一个将矩阵映射到实数的函数。通俗来说,矩阵范数可以认为是一种衡量矩阵大小和变化的度量方法。在数值分析和线性代数中,矩阵范数是一个核心概念,广泛应用于矩阵理论、矩阵计算和控制系统理论等领域。

在Python中,我们可以使用Numpy库提供的norm函数来计算矩阵范数或向量范数。

1. 向量范数

向量范数是一个函数,将向量映射到实数,具体来说,向量范数是一个描述向量大小的度量方法。在Numpy中,我们可以使用norm函数来计算向量的范数。norm函数的基本语法如下:

numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)

其中参数的含义如下:

  • x:要计算范数的向量或矩阵。
  • ord:范数的类型,可以是下面八种之一:
    • ord=1:一范数,也就是绝对值的和。
    • ord=2:二范数,也就是欧几里得距离。
    • ord=np.inf:无穷范数,即向量中绝对值最大的值。
    • ord=-1:负无穷范数,即向量中绝对值最小的值。
    • ord=-2:负二范数,即向量中绝对值最小的值的平方。
    • ord=None:默认值,等同于ord=2。
    • ord='fro':矩阵的弗罗贝尼乌斯范数,即矩阵元素平方和的平方根。
  • axis:对于多维矩阵,指定对哪个维度计算范数,可以是0、1、-1等。
  • 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
2. 矩阵范数

矩阵范数是一个将矩阵映射到实数的函数,衡量一个矩阵的大小和变化程度。下面介绍八种矩阵范数:

2.1 一范数(列范数)

矩阵的一范数是其所有列向量的绝对值之和的最大值。

2.2 二范数(谱范数)

矩阵的二范数是其所有特征值的平方和的平方根。

2.3 无穷范数(行范数)

矩阵的无穷范数是其所有行向量的绝对值之和的最大值。

2.4 范数

矩阵的Frobenius范数是其所有元素的平方和的平方根。

2.5 列和范数

矩阵的列和范数是其所有列向量的绝对值之和的最大值。

2.6 行和范数

矩阵的行和范数是其所有行向量的绝对值之和的最大值。

2.7 最大值范数

矩阵的最大值范数是其所有元素的绝对值之和的最大值。

2.8 矩阵秩

矩阵的秩是其非零特征值的个数,也可以说是其奇异值分解中非零奇异值的个数。

下面分别给出计算每种矩阵范数的公式和代码实现。

2.1 列范数(一范数)

矩阵的列范数是其所有列向量的绝对值之和的最大值。

计算公式:$||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
2.2 谱范数(二范数)

矩阵的谱范数是其所有特征值的平方和的平方根。

计算公式:$||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
2.3 行范数(无穷范数)

矩阵的行范数是其所有行向量的绝对值之和的最大值。

计算公式:$||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
2.4 Frobenius范数

矩阵的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
2.5 列和范数

矩阵的列和范数是其所有列向量的绝对值之和的最大值。

计算公式:$||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
2.6 行和范数

矩阵的行和范数是其所有行向量的绝对值之和的最大值。

计算公式:$||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
2.7 最大值范数

矩阵的最大值范数是其所有元素的绝对值之和的最大值。

计算公式:$||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
2.8 矩阵秩

矩阵的秩是其非零特征值的个数,也可以说是其奇异值分解中非零奇异值的个数。

代码实现:

import numpy as np

A = np.array([[1,-2,3],[0,1,3],[3,-1,8]])
print(np.linalg.matrix_rank(A))
# 输出:3