在scipy.linalg
的函數中,往往會提供兩種參數,其一是check_finite
,當為True
時將進行有限檢查,另一類是overwrite_xxxx
,表示xxxx
在計算過程中是否可以被覆寫。簡潔起見,後文說a
提供覆寫開關,就表示存在一個參數overwrite_a
,當其為True
時,a允許計算過程中被覆寫;若說提供有限檢查開關,則代表提供check_finite
參數。
在scipy.linalg
中提供了函數norm
用來求範數,其定義為
norm(a, ord=None, axis=None, keepdims=False, check_finite=True)
其中ord
用來宣告範數的階
ord | 矩陣範數 | 向量範數 |
---|---|---|
None | 弗羅貝尼烏斯範數 | |
|
'fro' | 弗羅貝尼烏斯範數 |
|
'nuc' | #核範數 |
inf |
#max(sum(abs(a), axis=1)) | |
#-inf |
min(sum(abs(a), axis=1)) | |
#0 | ##-
| #sum(a!= 0)|
1
| max(sum(abs(a), axis=0))||
-1
| min(sum(abs(a), axis=0))||
2 | 2-範數(最大奇異值) |
|
-2 | 最小奇異值 |
# 若
a
為向量,若
為非零整數,記作n nn,設a i a_iai為矩陣a aa中的元素,則矩陣的n nn範數為
#數又稱「跡範數」 (trace norm),表示矩陣的所有奇異值總和。
Frobenius範數可定義為
其實質是向量的2-範數在矩陣中的自然推廣。 除了
scipy.linalg
之外,numpy.linalg
中也提供了
,其參數為<pre class="brush:py;">norm(x, ord=None, axis=None, keepdims=False)</pre>
其中order
的可選參數與scipy.linalg
中的
行列式在
scipy.linalg
中,行列式函數為det
,其定義非常簡單,除了待求矩陣 a
之外,就只有
的覆寫開關和有限檢查。
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
函數,但
提供,其定義為
umpy.trace(a, offset=0, axis1=0, axis2=1, dtype=None, out=None)
>>> 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求矩陣的範數和行列式的詳細內容。更多資訊請關注PHP中文網其他相關文章!