NumPy - 矩陣庫



NumPy 矩陣庫

NumPy 矩陣庫提供建立和操作矩陣的函式。此庫允許您執行各種矩陣運算,包括矩陣乘法、求逆和分解。

在 NumPy 中,可以使用 numpy.matrix() 函式或透過將現有陣列轉換為矩陣來建立矩陣。本教程將介紹建立矩陣的不同方法。

使用 numpy.matrix() 函式

numpy.matrix() 函式用於從字串表示或現有資料結構建立矩陣。此函式最適合快速建立小型矩陣。

示例

在下面的示例中,我們從字串表示和現有陣列建立矩陣。np.matrix() 函式將字串解釋為 2x2 矩陣,陣列直接轉換為矩陣格式:

import numpy as np

# Creating a matrix from a string
matrix_str = np.matrix('1 2; 3 4')
print("Matrix from string:\n", matrix_str)

# Creating a matrix from an array
array_data = np.array([[1, 2], [3, 4]])
matrix_from_array = np.matrix(array_data)
print("Matrix from array:\n", matrix_from_array)

以下是獲得的輸出:

Matrix from string:
[[1 2]
 [3 4]]
Matrix from array:
 [[1 2]
 [3 4]]

使用 numpy.array() 函式

您可以使用 numpy.asmatrix() 函式將 NumPy 陣列轉換為矩陣。當您擁有以陣列形式存在的現有資料並希望對其執行矩陣運算時,這非常有用。

示例

在下面的示例中,我們建立一個數組,然後使用 np.asmatrix() 函式將其轉換為矩陣:

import numpy as np

# Creating an array
array_data = np.array([[5, 6], [7, 8]])

# Converting array to matrix
matrix_data = np.asmatrix(array_data)
print("Converted Matrix:\n", matrix_data)

這將產生以下結果:

Converted Matrix:
[[5 6]
 [7 8]]

NumPy 中的矩陣運算

建立矩陣後,您可以執行各種矩陣運算,例如加法、乘法、轉置、求逆等等。

矩陣加法

新增兩個矩陣包括新增對應的元素。如果兩個矩陣具有相同的形狀,則可以逐元素地將它們相加。

示例

在此示例中,“matrix_1”和“matrix_2”逐元素相加,這意味著“matrix_1”的每個元素都加到“matrix_2”中對應的元素:

import numpy as np

# Add two matrices
matrix_1 = np.array([[1, 2], [3, 4]])
matrix_2 = np.array([[5, 6], [7, 8]])

result = matrix_1 + matrix_2
print(result)

以下是上述程式碼的輸出:

[[ 6  8]
 [10 12]]

矩陣乘法

我們可以使用以下方法執行矩陣乘法:

  • 使用 * 運算子
  • 使用 @ 運算子 (Python 3.5+)
  • 使用 np.dot() 函式
  • 使用 numpy.matmul() 函式

與逐元素乘法不同,矩陣乘法遵循線性代數規則。

示例

在此示例中,我們使用以上所有方法乘以兩個矩陣:

import numpy as np

matrix_1 = np.array([[1, 2], [3, 4]])
matrix_2 = np.array([[5, 6], [7, 8]])

# Matrix multiplication using *
matrix_product1 = matrix_1 * matrix_2
print("Matrix Multiplication (*):\n", matrix_product1)

# Matrix multiplication using @
matrix_product2 = matrix_1 @ matrix_2
print("Matrix Multiplication (@):\n", matrix_product2)

# Matrix multiplication using np.dot()
matrix_product3 = np.dot(matrix_1, matrix_2)
print("Matrix Multiplication (np.dot()):\n", matrix_product3)

# Matrix multiplication using np.matmul()
matrix_product4 = np.matmul(matrix_1, matrix_2)
print("Matrix Multiplication (np.matmul()):\n", matrix_product4)

獲得的輸出如下所示:

Matrix Multiplication (*):
[[ 5 12]
 [21 32]]
Matrix Multiplication (@):
[[19 22]
 [43 50]]
Matrix Multiplication (np.dot()):
[[19 22]
 [43 50]]
Matrix Multiplication (np.matmul()):
 [[19 22]
 [43 50]]

矩陣求逆

矩陣求逆是一個尋找矩陣的操作,當它與原始矩陣相乘時,會產生單位矩陣。可以使用 np.linalg.inv() 函式計算矩陣的逆。

但是,並非所有矩陣都是可逆的。矩陣必須是方陣並且具有非零行列式才能可逆。

示例

在下面的示例中,我們使用 np.linalg.inv() 函式反轉一個 2x2 矩陣。輸出是一個新矩陣,當它與原始矩陣相乘時,結果是單位矩陣:

import numpy as np

matrix = np.array([[1, 2], [3, 4]])

inverse_matrix = np.linalg.inv(matrix)
print(inverse_matrix)

執行上述程式碼後,我們得到以下輸出:

[[-2.   1. ]
 [ 1.5 -0.5]]

矩陣轉置

矩陣轉置包括將其翻轉到其對角線,交換行和列索引。我們可以使用 .T 屬性在 NumPy 中轉置矩陣。

示例

在下面的示例中,我們使用“.T”屬性轉置一個 2x2 矩陣:

import numpy as np

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

transposed = matrix.T
print(transposed)

產生的結果如下:

[[1 3]
 [2 4]]

矩陣行列式

矩陣的行列式是一個標量值,可以使用 np.linalg.det() 函式計算。它提供有關矩陣屬性的資訊,例如它是否可逆。

非零行列式表示矩陣可逆,而行列式為零表示矩陣是奇異的。

示例

在此示例中,np.linalg.det() 函式計算給定矩陣的行列式:

import numpy as np

# Compute the determinant
matrix = np.array([[1, 2], [3, 4]])

det = np.linalg.det(matrix)
print("Determinant:", det)

我們得到如下所示的輸出:

Determinant: -2.0000000000000004

特徵值和特徵向量

numpy.linalg.eig() 函式用於計算方陣的特徵值和右特徵向量。特徵值表示向量的幅度,而特徵向量提供方向。

特徵值和特徵向量是線性代數中的基本概念,在許多領域都很重要,例如主成分分析 (PCA) 和求解微分方程。

示例

在此示例中,np.linalg.eig() 函式計算矩陣的特徵值和特徵向量。特徵值表示沿每個特徵向量方向縮放的幅度:

import numpy as np

# Compute eigenvalues and eigenvectors
matrix = np.array([[4, -2], [1,  1]])

eigvals, eigvecs = np.linalg.eig(matrix)
print("Eigenvalues:", eigvals)
print("Eigenvectors:", eigvecs)

以下是獲得的輸出:

Eigenvalues: [3. 2.]
Eigenvectors: 
[[0.89442719 0.70710678]
 [0.4472136  0.70710678]]

奇異值分解 (SVD)

SVD 是一種矩陣分解方法,它將方陣的特徵分解推廣到任何 m x n 矩陣。我們可以在 NumPy 中使用 numpy.linalg.svd() 函式實現這一點。

特徵分解是將矩陣分解為其特徵值和特徵向量的過程。這些特徵值表示縮放因子,而特徵向量顯示矩陣拉伸或壓縮的方向。

示例

在下面的示例中,我們使用 np.linalg.svd() 函式對“2x2”矩陣執行奇異值分解。結果包括 U 矩陣、奇異值和 V 矩陣,它們共同表示原始矩陣:

import numpy as np

matrix_a = np.matrix('1 2; 3 4')

# Performing SVD
U, S, V = np.linalg.svd(matrix_a)
print("U Matrix:\n", U)
print("Singular Values:\n", S)
print("V Matrix:\n", V)

這將產生以下結果:

U Matrix:
[[-0.40455358 -0.9145143 ]
 [-0.9145143   0.40455358]]
Singular Values:
[5.4649857  0.36596619]
V Matrix:
[[-0.57604844 -0.81741556]
 [ 0.81741556 -0.57604844]]
廣告