NumPy - 矩陣範數



什麼是矩陣範數?

矩陣範數是一個將非負數賦予矩陣的函式。它提供了一種衡量矩陣大小或幅度的度量。

一般來說,矩陣範數用於量化矩陣的大小,它們在涉及矩陣方程的問題中起著重要作用,例如求解線性方程組或執行矩陣分解。

常見的矩陣範數型別

有幾種型別的矩陣範數,但最常用的是:

  • 弗羅貝尼烏斯範數
  • 1-範數
  • 無窮範數
  • 2-範數(譜範數)

弗羅貝尼烏斯範數

弗羅貝尼烏斯範數是最簡單和最常用的矩陣範數之一。它定義為矩陣元素的絕對平方和的平方根。數學上,它由以下公式給出:

‖A‖F = √(Σi=1 Σj=1 |aij|2)

其中A是矩陣,aij是矩陣的元素。弗羅貝尼烏斯範數等價於將矩陣視為向量時的L2範數。

1-範數

矩陣的1-範數(也稱為最大列和範數)定義為最大絕對列和。數學上,它由以下公式給出:

‖A‖1 = maxj Σi=1 |aij|

簡單來說,1-範數是矩陣任意一列中元素的絕對值的和的最大值。

無窮範數

矩陣的無窮範數(也稱為最大行和範數)定義為最大絕對行和。數學上,它由以下公式給出:

‖A‖ = maxi Σj=1 |aij|

無窮範數給出矩陣任意一行中元素的絕對值的和的最大值。

2-範數(譜範數)

矩陣的2-範數(也稱為譜範數)定義為矩陣的最大奇異值。它衡量矩陣應用於向量時的最大拉伸因子。2-範數由以下公式給出:

‖A‖2 = σmax(A)

其中,σmax(A)是矩陣A的最大奇異值。在這種情況下,2-範數與矩陣的奇異值相關,可以使用奇異值分解 (SVD) 計算。

NumPy 中的矩陣範數

NumPy 提供了計算各種矩陣範數的函式。numpy.linalg.norm()函式可用於計算大多數常見的矩陣範數。讓我們探索如何對不同型別的矩陣範數使用此函式。

使用 NumPy 計算弗羅貝尼烏斯範數

要使用 NumPy 計算弗羅貝尼烏斯範數,我們使用numpy.linalg.norm()函式,並將其引數ord='fro'

示例

在以下示例中,矩陣A的弗羅貝尼烏斯範數是透過取矩陣中所有元素的平方和的平方根來計算的:

import numpy as np

# Define a matrix A
A = np.array([[1, 2], [3, 4]])

# Compute the Frobenius norm of the matrix
frobenius_norm = np.linalg.norm(A, 'fro')

print("Frobenius norm of A:", frobenius_norm)

以下是獲得的輸出:

Frobenius norm of A: 5.477225575051661

使用 NumPy 計算 1-範數

要計算 1-範數,我們使用numpy.linalg.norm()函式,並將其引數ord=1。矩陣的 1-範數是矩陣任意一列中元素的絕對值的和的最大值。

示例

在這種情況下,列和為 4 和 6,因此 1-範數為 6:

import numpy as np

# Define a matrix A
A = np.array([[1, 2], [3, 4]])

# Compute the 1-norm of the matrix
one_norm = np.linalg.norm(A, 1)

print("1-norm of A:", one_norm)

以下是獲得的輸出:

1-norm of A: 6.0

使用 NumPy 計算無窮範數

要計算無窮範數,我們使用numpy.linalg.norm()函式,並將其引數ord=np.inf。矩陣的無窮範數是矩陣任意一行中元素的絕對值的和的最大值。

示例

在這種情況下,行和為 3 和 7,因此無窮範數為 7:

import numpy as np

# Define a matrix A
A = np.array([[1, 2], [3, 4]])

# Compute the infinity norm of the matrix
infinity_norm = np.linalg.norm(A, np.inf)

print("Infinity norm of A:", infinity_norm)

以下是獲得的輸出:

Infinity norm of A: 7.0

使用 NumPy 計算 2-範數

要計算 2-範數(譜範數),我們使用numpy.linalg.norm()函式,並將其引數ord=2。矩陣的 2-範數(譜範數)是矩陣的最大奇異值,它衡量矩陣應用於向量時的最大拉伸因子。

示例

以下是在 NumPy 中計算 2-範數的示例:

import numpy as np

# Define a matrix A
A = np.array([[1, 2], [3, 4]])

# Compute the 2-norm of the matrix
two_norm = np.linalg.norm(A, 2)

print("2-norm (spectral norm) of A:", two_norm)

以下是獲得的輸出:

2-norm (spectral norm) of A: 5.464985704219043

矩陣範數的應用

矩陣範數在數值分析、機器學習、最佳化等領域有許多實際應用:

  • 數值穩定性:矩陣範數用於分析數值演算法的穩定性,尤其是在求解線性系統或執行矩陣分解時。
  • 機器學習:在機器學習中,矩陣範數通常用於正則化模型並防止過擬合。例如,L2 正則化使用弗羅貝尼烏斯範數來懲罰模型中較大的權重。
  • 最佳化:矩陣範數用於衡量最佳化問題中誤差或與所需解的偏差。
  • 訊號處理:在訊號處理中,矩陣範數用於衡量訊號和濾波器的“能量”或幅度。
廣告