[paddle] 矩阵相关的指标

行列式 det

行列式定义参考

d e t ( A ) = ∑ i 1 , i 2 , ⋯   , i n ( − 1 ) σ ( i 1 , ⋯   , i n ) a 1 , i 1 a 2 , i 2 , ⋯   , a n , i n det(A) =\sum_{i_1,i_2,\cdots,i_n } (-1)^{\sigma(i_1,\cdots,i_n)} a_{1,i_1}a_{2,i_2},\cdots, a_{n,i_n} det(A)=i1,i2,⋯,in∑(−1)σ(i1,⋯,in)a1,i1a2,i2,⋯,an,in
i 1 , ⋯   , i n i_1,\cdots,i_n i1,⋯,in 是 1 , ⋯   , n 1,\cdots,n 1,⋯,n 的排列.

参数

x (Tensor):输入一个或批量矩阵。x 的形状应为 [*, M, M],其中 * 为零或更大的批次维度,数据类型支持 float32、float64。

返回

Tensor,输出矩阵的行列式值 Shape 为 [*] 。

多个方阵的行列式

python 复制代码
import paddle
paddle.seed(2023)
x =  paddle.randn([4,3,3])
A = paddle.linalg.det(x)
print(A)

常用方阵的行列式:

python 复制代码
import paddle
paddle.seed(2023)
x =  paddle.randn([3,3])
A = paddle.linalg.det(x)
print(A)

矩阵的范数 norm

矩阵的算子范数

矩阵的算子范数(也称为矩阵范数或诱导范数)是衡量矩阵作为线性算子作用在向量上的"放大"程度的一种度量。算子范数依赖于向量范数的定义,常见的算子范数包括以下几种:

  1. 2-范数(谱范数)
    矩阵的2-范数是矩阵最大奇异值或最大特征值的绝对值。对于矩阵 A A A ,2-范数定义为:
    ∥ A ∥ 2 = σ max ⁡ ( A ) \|A\|2 = \sigma{\max}(A) ∥A∥2=σmax(A)
    其中 σ max ⁡ ( A ) \sigma_{\max}(A) σmax(A) 是矩阵 A A A 的最大奇异值。2-范数也是矩阵作为线性算子在欧几里得空间中最大"拉伸"效果的度量。
  2. 1-范数
    矩阵的1-范数是矩阵列向量1-范数的最大值。对于矩阵 A A A ,1-范数定义为:
    ∥ A ∥ 1 = max ⁡ ∥ x ∥ 1 = 1 ∥ A x ∥ 1 \|A\|1 = \max{\|x\|_1 = 1} \|Ax\|_1 ∥A∥1=∥x∥1=1max∥Ax∥1
    这实际上是矩阵列向量的绝对和的最大值。
  3. ∞ \infty ∞-范数(无穷范数)
    矩阵的 ∞ \infty ∞-范数是矩阵行向量1-范数的最大值。对于矩阵 A A A , ∞ \infty ∞-范数定义为:
    ∥ A ∥ ∞ = max ⁡ ∥ x ∥ ∞ = 1 ∥ A x ∥ ∞ \|A\|{\infty} = \max{\|x\|{\infty} = 1} \|Ax\|{\infty} ∥A∥∞=∥x∥∞=1max∥Ax∥∞
    这实际上是矩阵行向量的绝对和的最大值。
  4. p-范数
    更一般地,可以定义矩阵的p-范数。对于矩阵 A A A ,p-范数定义为:
    ∥ A ∥ p = max ⁡ ∥ x ∥ p = 1 ∥ A x ∥ p \|A\|p = \max{\|x\|_p = 1} \|Ax\|_p ∥A∥p=∥x∥p=1max∥Ax∥p
    其中 p p p 是一个正实数。当 p = 2 p = 2 p=2 时,就是2-范数(谱范数)。
    算子范数的性质:
  • 正定性 :对于任意矩阵 A A A,都有 ∥ A ∥ ≥ 0 \|A\| \geq 0 ∥A∥≥0,且 ∥ A ∥ = 0 \|A\| = 0 ∥A∥=0 当且仅当 A = 0 A = 0 A=0。
  • 齐次性 :对于任意矩阵 A A A 和标量 c c c,都有 ∥ c A ∥ = ∣ c ∣ ∥ A ∥ \|cA\| = |c| \|A\| ∥cA∥=∣c∣∥A∥。
  • 三角不等式 :对于任意矩阵 A A A 和 B B B,都有 ∥ A + B ∥ ≤ ∥ A ∥ + ∥ B ∥ \|A + B\| \leq \|A\| + \|B\| ∥A+B∥≤∥A∥+∥B∥。
  • 相容性 :对于任意矩阵 A A A 和 B B B,都有 ∥ A B ∥ ≤ ∥ A ∥ ∥ B ∥ \|AB\| \leq \|A\| \|B\| ∥AB∥≤∥A∥∥B∥。

矩阵的核范数

矩阵的核范数(Nuclear Norm)是矩阵理论中的一个重要概念,特别是在低秩矩阵恢复和压缩感知等领域。核范数是矩阵奇异值之和,它可以看作是矩阵的秩的一种凸近似。

对于任意矩阵 A ∈ R m × n A \in \mathbb{R}^{m \times n} A∈Rm×n,其核范数定义为:
∥ A ∥ ∗ = ∑ i = 1 min ⁡ ( m , n ) σ i ( A ) \|A\|* = \sum{i=1}^{\min(m,n)} \sigma_i(A) ∥A∥∗=i=1∑min(m,n)σi(A)

其中, σ i ( A ) \sigma_i(A) σi(A)表示矩阵 A A A 的第 i i i 个奇异值,奇异值是矩阵 A A A 的奇异值分解(SVD)中的非负对角元素。

核范数的一些重要性质包括:

  1. 凸性:核范数是矩阵秩的凸包络,这意味着它是秩函数的最小凸近似。在优化问题中,使用核范数可以使得问题变得可解,因为秩函数是非凸的,而核范数是凸的。
  2. ** lipschitz连续性**:核范数是 lipschitz连续的,这意味着对于任意两个矩阵 A A A 和 B B B,存在常数 L L L 使得:
    ∥ A ∥ ∗ − ∥ B ∥ ∗ ∥ ≤ L ∥ A − B ∥ F \|A\|* - \|B\|* \| \leq L \|A - B\|_F ∥A∥∗−∥B∥∗∥≤L∥A−B∥F
    其中 ( | \cdot |_F ) 表示 Frobenius 范数。
  3. 矩阵逼近:在给定矩阵的核范数约束下,最优的低秩逼近可以通过矩阵的奇异值软阈值化实现。这意味着核范数在低秩矩阵逼近问题中起着关键作用。

矩阵的Frobenius范数

矩阵的F范数,也称为Frobenius范数,是矩阵元素平方和的平方根。它将矩阵视为一个长向量,并计算其欧几里得范数。对于任意矩阵 A ∈ R m × n A \in \mathbb{R}^{m \times n} A∈Rm×n,其Frobenius范数定义为:
∥ A ∥ F = ∑ i = 1 m ∑ j = 1 n ∣ a i j ∣ 2 \|A\|F = \sqrt{\sum{i=1}^{m} \sum_{j=1}^{n} |a_{ij}|^2} ∥A∥F=i=1∑mj=1∑n∣aij∣2

其中, a i j a_{ij} aij 表示矩阵 A A A 的第 i i i 行第 j j j 列的元素。

Frobenius范数的一些重要性质包括:

  1. 与核范数的关系 :对于任意矩阵 A A A,有 ∥ A ∥ ∗ ≤ ∥ A ∥ F \|A\|_* \leq \|A\|F ∥A∥∗≤∥A∥F,其中 ∥ A ∥ ∗ \|A\|* ∥A∥∗表示矩阵的核范数。
  2. 与2-范数的关系 :对于矩阵 A A A ,其Frobenius范数等于其向量化的2-范数,即 ∥ A ∥ F = ∥ v e c ( A ) ∥ 2 \|A\|_F = \|vec(A)\|_2 ∥A∥F=∥vec(A)∥2,其中 v e c ( A ) vec(A) vec(A) 表示将矩阵 A A A 按列堆叠成向量。

paddle.linalg.norm(x, p=None, axis=None, keepdim=False, name=None)

将计算给定 Tensor 的矩阵范数(Frobenius 范数, Nuclear 范数或 p 范数)和向量范数(向量 1 范数、2 范数、或者通常的 p 范数)。

该函数计算的是向量范数还是矩阵范数,确定方法如下: - 如果 axis 是 int 类型,计算向量范数 - 如果 axis 是二维数组,计算矩阵范数 - 如果 axis 为 None,x 会被压缩成一维向量然后计算向量范数

Paddle 支持以下范数:

参数

x (Tensor) - 输入 Tensor。维度为多维,数据类型为 float32 或 float64。

p (int|float|string,可选) - 范数(ord)的种类。目前支持的值为fro(Frobenius范数) 、 nuc(核范数)、inf、-inf、0、1、2,和任何实数 p 对应的 p 范数。默认值为 None。

axis (int|list|tuple,可选) - 使用范数计算的轴。如果 axis 为 None,则忽略 input 的维度,将其当做向量来计算。如果 axis 为 int 或者只有一个元素的 list|tuple,norm API 会计算输入 Tensor 的向量范数。如果 axis 为包含两个元素的 list,API 会计算输入 Tensor 的矩阵范数。当 axis < 0 时,实际的计算维度为 rank(input) + axis。默认值为 None 。

keepdim (bool,可选) - 是否在输出的 Tensor 中保留和输入一样的维度,默认值为 False。当 keepdim 为 False 时,输出的 Tensor 会比输入 input 的维度少一些。

name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

Tensor,在指定 axis 上进行范数计算的结果,与输入 input 数据类型相同。

python 复制代码
import paddle
x = paddle.arange(24, dtype="float32").reshape([2, 3, 4]) - 12
print(x)

# compute frobenius norm along last two dimensions.
out_fro = paddle.linalg.norm(x, p='fro', axis=[0,1])
print(out_fro)

# compute 2-order vector norm along last dimension.
out_pnorm = paddle.linalg.norm(x, p=2, axis=-1)
print(out_pnorm)

# compute 2-order  norm along [0,1] dimension.
out_pnorm = paddle.linalg.norm(x, p=2, axis=[0,1])
print(out_pnorm)

# compute inf-order  norm
out_pnorm = paddle.linalg.norm(x, p=float("inf"))
print(out_pnorm)

out_pnorm = paddle.linalg.norm(x, p=float("inf"), axis=0)
print(out_pnorm)

# compute -inf-order  norm
out_pnorm = paddle.linalg.norm(x, p=-float("inf"))
print(out_pnorm)

out_pnorm = paddle.linalg.norm(x, p=-float("inf"), axis=0)
print(out_pnorm)

条件数 cond

c o n d ( A , p ) = sup ⁡ x ≠ 0 ∥ A ∥ p ∥ A − 1 ∥ p \mathrm{cond}(A,p) =\sup_{x\neq 0} \frac{\|A\|_p}{\|A^{-1}\|_p} cond(A,p)=x=0sup∥A−1∥p∥A∥p

其中 ∥ ⋅ ∥ p \| \cdot \|_p ∥⋅∥p 是矩阵的 p p p 范数。

根据范数种类 p 计算一个或一批矩阵的条件数,也可以通过 paddle.cond 来调用。

参数

x (Tensor):输入可以是形状为 (, m, n) 的矩阵 Tensor, * 为零或更大的批次维度,此时 p 为 2 或 -2;也可以是形状为 (, n, n) 的可逆(批)方阵 Tensor,此时 p 为任意已支持的值。数据类型为 float32 或 float64 。

p (float|string,可选):范数种类。目前支持的值为 fro(Frobenius范数) 、 nuc(核范数) 、 1 、 -1 、 2 、 -2 、 inf 、 -inf。默认值为 None,即范数种类为 2 。

name (str,可选) - 具体用法请参见 Name,一般无需设置,默认值为 None。

返回

Tensor,条件数的计算结果,数据类型和输入 x 的一致。

python 复制代码
import paddle
paddle.seed(2023)
x = paddle.to_tensor([[1., 0, -1], [0, 1, 0], [1, 0, 1]])

# compute conditional number when p is None
out = paddle.linalg.cond(x)
print(out)

# compute conditional number when order of the norm is 'fro'
out_fro = paddle.linalg.cond(x, p='fro')
print(out_fro)

# compute conditional number when order of the norm is 'nuc'
out_nuc = paddle.linalg.cond(x, p='nuc')
print(out_nuc)

# compute conditional number when order of the norm is 1
out_1 = paddle.linalg.cond(x, p=1)
print(out_1)

# compute conditional number when order of the norm is -1
out_minus_1 = paddle.linalg.cond(x, p=-1)
print(out_minus_1)

# compute conditional number when order of the norm is 2
out_2 = paddle.linalg.cond(x, p=2)
print(out_2)

# compute conditional number when order of the norm is -1
out_minus_2 = paddle.linalg.cond(x, p=-2)
print(out_minus_2)

# compute conditional number when order of the norm is inf
out_inf = paddle.linalg.cond(x, p=float("inf"))
print(out_inf)

# compute conditional number when order of the norm is -inf
out_minus_inf = paddle.linalg.cond(x, p=-float("inf"))
print(out_minus_inf)

a = paddle.randn([2, 4, 4])
print(a)

a_cond_fro = paddle.linalg.cond(a, p='fro')
print(a_cond_fro)

b = paddle.randn([2, 3, 4])
print(b)

b_cond_2 = paddle.linalg.cond(b, p=2)
print(b_cond_2)

矩阵的秩

线性无关性的定义

一组向量被称为线性无关,如果其中没有任何一个向量可以表示为其他向量的线性组合, 例如
α 1 = ∑ i = 2 n k i α i \alpha_1 = \sum_{i=2}^n k_i\alpha_i α1=∑i=2nkiαi。

矩阵的行向量组和列向量组

给定一个 m × n m \times n m×n 矩阵 A A A ,它包含 m m m 个行向量和 n n n 个列向量。

极大线性无关组

在一组向量中,极大线性无关组是指包含最多线性无关向量的子集。添加任何额外的向量都会使该组变得线性相关。

矩阵的秩的定义

矩阵 A A A 的秩是指其行向量组或列向量组中极大线性无关组的大小。

矩阵的行秩等于其列秩,统称为矩阵的秩。

python 复制代码
import paddle

a = paddle.eye(10)
b = paddle.linalg.matrix_rank(a)
print(b)

c = paddle.ones(shape=[3, 4, 5, 5])
d = paddle.linalg.matrix_rank(c, tol=0.01, hermitian=True)
print(d)
相关推荐
你要飞10 分钟前
考研线代第三课:向量组
笔记·线性代数·考研·矩阵
aigcapi13 分钟前
AI 获客系统哪个好?矩阵系统哪个好?2026 客观测评 TOP4
大数据·人工智能·矩阵
一碗姜汤18 小时前
【统计基础】卡尔曼滤波,矩阵对迹求导,Joseph Form,条件数
线性代数·矩阵
sunfove19 小时前
麦克斯韦方程组 (Maxwell‘s Equations) 的完整推导
线性代数·算法·矩阵
yyy(十一月限定版)19 小时前
matlab矩阵的操作
算法·matlab·矩阵
ComputerInBook20 小时前
代数学基本概念理解——幺正矩阵(Unitary matrix)(酉矩阵?)
线性代数·矩阵·正交矩阵·幺正矩阵·酉矩阵
AI科技星1 天前
光速飞行器动力学方程的第一性原理推导、验证与范式革命
数据结构·人工智能·线性代数·算法·机器学习·概率论
一碗姜汤1 天前
【统计基础】从线性代数的直观角度理解SVD奇异值分解
线性代数
好奇龙猫1 天前
【大学院-筆記試験練習:线性代数和数据结构(5)】
数据结构·线性代数
jinmo_C++1 天前
Leetcode矩阵
算法·leetcode·矩阵