天天看點

c++求矩陣的秩_Numpy 矩陣

c++求矩陣的秩_Numpy 矩陣

機器學習中會用到大量的數學操作,而 Numpy 計算庫使這些操作變得簡單,這其中就涉及到了 Numpy 的矩陣操作,下面我們就來一起學習如何在 Numpy 科學計算庫中進行矩陣的一些基本運算。

1 矩陣的定義

定義矩陣使用 Numpy 科學計算庫中的 mat 函數,如下所示:

numpy.mat(data, dtype=None)
  • data,表示矩陣的資料。
  • dtype,表示矩陣中的資料類型,預設是浮點數。

應用示例:

# (1) 定義一個3 X 3的矩陣,資料類型為 int
import numpy as np
data = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]
A = np.mat(data, int)
print(A, type(A)) 

# 輸出結果:
#[[1 2 3]
# [4 5 6]
# [7 8 9]] <class 'numpy.matrix'>

# (2) 定義一個3 X 3的矩陣,矩陣元素全為0,資料類型為 int
import numpy as np
A = np.mat(np.zeros((3, 3)), int)
print(A)

# 輸出結果:
#[[0 0 0]
# [0 0 0]
# [0 0 0]]

# (3) 定義一個3 X 3的矩陣,矩陣元素全為1
import numpy as np
A = np.mat(np.ones((3, 3)))
print(A)

# 輸出結果:
#[[1. 1. 1.]
# [1. 1. 1.]
# [1. 1. 1.]]

# (4) 定義一個3 X 3的機關矩陣
import numpy as np
A = np.mat(np.eye(3, 3), int)
print(A)

# 輸出結果:
#[[1 0 0]
# [0 1 0]
# [0 0 1]]

# (5) 定義一個3 X 3的對角矩陣,主對角線之外的元素皆為0
import numpy as np
A = np.mat(np.diag([1, 2, 3]), int)
print(A)

# 輸出結果:
#[[1 0 0]
# [0 2 0]
# [0 0 3]]

# (6) 定義一個3 X 3的矩陣,把100作為所有元素初始值
import numpy as np
A = np.mat(np.full((3, 3), 100), int)
print(A)

# 輸出結果:
#[[100 100 100]
# [100 100 100]
# [100 100 100]]
           

2 矩陣的線性代數運算

2.1 矩陣的加法與減法

c++求矩陣的秩_Numpy 矩陣

隻有兩個矩陣的行數和列數相等時,才可以進行矩陣的加法和減法運算,否則程式會抛出 ValueError 異常。

應用示例:

# 定義兩個矩陣 A 和 B,分别進行矩陣的加法和減法運算
import numpy as np
A = np.mat(np.full((3, 3), 100), int)
B = np.mat(np.full((3, 3), 200), int)
print(A+B)
print(A-B)

# 輸出結果:
#[[300 300 300]
# [300 300 300]
# [300 300 300]]
#[[-100 -100 -100]
# [-100 -100 -100]
# [-100 -100 -100]]
           

2.2 矩陣的數乘

某個實數乘以矩陣稱作矩陣的數乘。

應用示例:

# 定義矩陣 A 和浮點數 a,進行矩陣的數乘運算
import numpy as np
a = 0.1
A = np.mat(np.full((3, 3), 100), int)
print(a*A)

# 輸出結果:
#[[10. 10. 10.]
# [10. 10. 10.]
# [10. 10. 10.]]
           

2.3 矩陣的點乘

隻有在第一個矩陣的列數與第二個矩陣的行數相等時,兩個矩陣才能相乘,否則程式會抛出 ValueError 異常。

應用示例:

# 定義矩陣 A 和矩陣 B,進行矩陣的乘法運算
import numpy as np
A = np.mat(np.full((2, 3), 10), int)
B = np.mat(np.full((3, 3), 10), int)
print(A*B)  # 求矩陣相乘形式一
print(A.dot(B))  # 求矩陣相乘形式二
print(np.dot(A, B))  # 求矩陣相乘形式三

# 輸出結果:
#[[300 300 300]
# [300 300 300]]
#[[300 300 300]
# [300 300 300]]
           

2.4 矩陣的轉置

把矩陣的每一行轉換為列,稱為矩陣的轉置。

應用示例:

# 定義矩陣 A,進行矩陣轉置運算
import numpy as np
data = [[1,2,3],[4,5,6],[7,8,9]]
A = np.mat(data, int)
print(A.T)

# 輸出結果:
#[[1 4 7]
# [2 5 8]
# [3 6 9]]
           

2.5 矩陣的求逆

非奇異矩陣下,可以對矩陣進行求逆運算。(非奇異矩陣就是行列式不為 0 的矩陣)

應用示例:

# 定義矩陣 A,進行矩陣求逆運算
import numpy as np
data = [[1, 2], [3, 4]]
A = np.mat(data, int)
print(A.I)

# 輸出結果:
#[[-2.   1. ]
# [ 1.5 -0.5]]
           

2.6 矩陣的行列式

對于矩陣 A,均可對應一個标量 det(A),它的值将告訴我們矩陣是否為非奇異的。

應用示例:

# 求矩陣 A 的行列式 det(A)
import numpy as np
A = np.mat([[1, 2],[3, 4]], int)
det = np.linalg.det(A)
print(det)

# 輸出結果:
# -2.0000000000000004
           

計算結果不等于-2,是因為浮點數運算存在精度損失。

2.7 矩陣的秩

如果把矩陣看成一個向量組,那麼秩就是線性無關向量的個數,也就是向量組的次元,概念比較複雜,有興趣的讀者可以繼續探索。矩陣的秩應該是小于等于行數與列數的最小值。

# 求矩陣 A 的秩 rank(A)
import numpy as np
A = np.mat([[1, 2],[3, 4]], int)
rank = np.linalg.matrix_rank(A)
print(rank)

# 輸出結果:
# 2
           

2.8 矩陣特征值和特征向量

A 為 n 階矩陣,若數 λ 和 n 維非0列向量 x 滿足 Ax=λx,那麼數 λ 稱為 A 的特征值,x 稱為 A 的對應于特征值 λ的特征向量。

應用示例:

# 求矩陣 A 的特征值和其對應的特征向量
import numpy as np
A = np.mat([[1, 2],[3, 4]], int)
value, vector = np.linalg.eig(A)
print(value)
print(vector)

# 輸出結果:
#[-0.37228132  5.37228132]
#[[-0.82456484 -0.41597356]
# [ 0.56576746 -0.90937671]]
           

2.9 矩陣的線性方程解

求解形如 Ax = b 的線性方程組,其中 A 為矩陣,b 為一維或二維的數組,x 是未知變量。

應用舉例:

# 求解如下線性方程組的解:
# x + y + z = 3
# 3x + y + 4z = 8
# 8x + 9y + 5z = 22
import numpy as np
A = np.mat([[1, 1, 1], [3, 1, 4], [8, 9, 5]], int)
b = np.mat([[3], [8], [22]], int)
x = np.linalg.solve(A,b)
print(x)

# 輸出結果:
#[[1.]
# [1.]
# [1.]]
           

繼續閱讀