在scipy.linalg
的函数中,往往会提供两种参数,其一是check_finite
,当为True
时将进行有限检查,另一类是overwrite_xxxx
,表示xxxx
在计算过程中是否可以被覆写。简洁起见,后文中说a
提供覆写开关,就表示存在一个参数overwrite_a
,当其为True
时,a允许计算过程中被覆写;若说提供有限检查开关,则代表提供check_finite
参数。
范数
在scipy.linalg
中提供了函数norm
用来求范数,其定义为
1
|
norm(a, ord = None , axis = None , keepdims = False , check_finite = True ) |
其中ord
用于声明范数的阶
ord | 矩阵范数 | 向量范数 |
---|---|---|
None | 弗罗贝尼乌斯范数 | 2-范数 |
'fro' |
弗罗贝尼乌斯范数 | - |
'nuc' |
核范数 | - |
inf |
max(sum(abs(a), axis=1)) |
max ( ∣ a ∣ ) |
-inf |
min(sum(abs(a), axis=1)) |
min ( ∣ a ∣ ) |
0 | - |
sum(a!=0) |
1 |
max(sum(abs(a), axis=0)) |
|
-1 |
min(sum(abs(a), axis=0)) |
|
2 | 2-范数(最大奇异值) | |
-2 | 最小奇异值 | |
若a
为向量,若ord
为非零整数,记作n nn,设a i a_iai为矩阵a aa中的元素,则矩阵的n nn范数为
核范数又称“迹范数” (trace norm),表示矩阵的所有奇异值之和。
Frobenius范数可定义为
其实质是向量的2-范数在矩阵中的自然推广。
除了scipy.linalg
之外,numpy.linalg
中也提供了norm
,其参数为
1
|
norm(x, ord = None , axis = None , keepdims = False ) |
其中order
的可选参数与scipy.linalg
中的norm
函数相同。
行列式
在scipy.linalg
中,行列式函数为det
,其定义非常简单,除了待求矩阵a
之外,就只有a
的覆写开关和有限检查。
示例如下
1
2
3
4
5
6
7
8
|
import numpy as np from scipy import linalg a = np.array([[ 1 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]]) linalg.det(a) # 0.0 a = np.array([[ 0 , 2 , 3 ], [ 4 , 5 , 6 ], [ 7 , 8 , 9 ]]) linalg.det(a) # 3.0 |
迹
scipy.linalg
不提供trace
函数,但是numpy
提供,其定义为
1
|
umpy.trace(a, offset = 0 , axis1 = 0 , axis2 = 1 , dtype = None , out = None ) |
其中
-
offset
为偏移量,表示相对于主对角线的偏移 -
axis1, axis2
表示坐标轴 -
dtype
用于调整输出值的数据类型
1
2
3
4
5
6
7
|
>>> x = np.random.rand( 3 , 3 ) >>> print (x) [[ 0.26832187 0.64615363 0.09006217 ] [ 0.63106319 0.65573765 0.35842304 ] [ 0.66629322 0.16999836 0.92357658 ]] >>> np.trace(x) 1.8476361016546932 |
到此这篇关于Python求矩阵的范数和行列式的文章就介绍到这了,更多相关Python求矩阵范数和行列式内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/m0_37816922/article/details/129864009