版權聲明:本文爲博主原創文章,未經博主允許不得轉載。
在線性代數中,一個向量通過矩陣轉換成另一個向量時,原有向量的大小就是向量的範數,這個變化過程的大小就是矩陣的範數。
矩陣的範數
首先假設矩陣的大小爲m∗nm∗n,即m行n列。
- 1-範數,又名列和範數。顧名思義,即矩陣列向量中絕對值之和的最大值。
- 2-範數,又名譜範數,計算方法爲矩陣的最大特徵值的開平方。
- -範數,又名行和範數。顧名思義,即矩陣行向量中絕對值之和的最大值。
- F-範數,Frobenius範數,計算方式爲矩陣元素的絕對值的平方和再開方。
向量的範數計算方法有以下5種:
- 1-範數,計算方式爲向量所有元素的絕對值之和。
- 2-範數,計算方式同歐式距離。
- -範數,所有向量元素中的最大值。
- −-範數,所有向量元素中的最小值。
- -範數,所有向量元素絕對值的p次方和的1/p次冪。
在Python中,我們利用norm函數來計算範數,具體如下:
norm(x, ord=None, axis=None, keepdims=False)是numpy庫裏linalg現行代數模塊中計算矩陣或向量範數的方法。
ord | 矩陣範數 | 向量範數 |
---|---|---|
None | Frobenius norm | 2-norm |
‘fro’ | Frobenius norm | – |
‘nuc’ | nuclear norm 核範數是奇異值的和 | – |
inf | max(sum(abs(x), axis=1)) | max(abs(x)) |
-inf | min(sum(abs(x), axis=1)) | min(abs(x)) |
0 | – | sum(x != 0) |
1 | max(sum(abs(x), axis=0)) | as below |
-1 | min(sum(abs(x), axis=0)) | as below |
2 | 2-norm (largest sing. value) | as below |
-2 | smallest singular value | as below |
other | – |
參數
----------
x : 輸入數組,如果axis是None,那麼x必須是一維或二維
ord : 可選{非零整數, inf, -inf, ‘fro’, ‘nuc’},具體如上表所示
axis : 可選{整數,2元組, None}
如果“axis”是一個整數,它指定“x”的軸計算向量的範數。如果“axis”是一個二元組,則指定包含二維矩陣的座標軸,以及這些矩陣的矩陣範數計算。如果“axis”爲空,那麼是對整體所有的數計算。
keepdims : 布爾值, optional
當 True時, 返回維度爲1的結果。
當False時,結果將是根據原始的“x”的維度正確廣播。
注意:嚴格來說,當 ord <= 0 時,不符合數學上的範數公式,但它仍然適用於各種數值目的。
import numpy as np
a = np.arange(12)
print(a)
b = a.reshape((3, 4))
print(b)
print(np.linalg.norm(a))
print(np.linalg.norm(b))
print(np.linalg.norm(b, 'fro'))
print(np.linalg.norm(b, 'nuc'))
print(np.linalg.norm(a, np.inf))
print(np.linalg.norm(a, -np.inf))
print(np.linalg.norm(a, 1))
print(np.linalg.norm(b, np.inf, axis=1))
print(np.linalg.norm(b, -np.inf, axis=0))
print(np.linalg.norm(b, 1))
[ 0 1 2 3 4 5 6 7 8 9 10 11]
[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]
22.4944437584
22.4944437584
22.4944437584
24.3646384993
11.0
0.0
66.0
[ 3. 7. 11.]
[ 0. 1. 2. 3.]
21.0