機器學習中會用到大量的數學操作,而 numpy 計算庫使這些操作變得簡單,這其中就涉及到了 numpy 的矩陣操作,下面我們就來一起學習如何在 numpy 科學計算庫中進行矩陣的一些基本運算。
定義矩陣使用 numpy 科學計算庫中的 mat 函式,如下所示:
numpy.mat(data, dtype=none)
應用示例:
# (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]] # (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)
# 輸出結果:
只有兩個矩陣的行數和列數相等時,才可以進行矩陣的加法和減法運算,否則程式會丟擲 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]]
某個實數乘以矩陣稱作矩陣的數乘。
應用示例:
# 定義矩陣 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.]]
只有在第乙個矩陣的列數與第二個矩陣的行數相等時,兩個矩陣才能相乘,否則程式會丟擲 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]]
把矩陣的每一行轉換為列,稱為矩陣的轉置。
應用示例:
# 定義矩陣 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]]
非奇異矩陣下,可以對矩陣進行求逆運算。(非奇異矩陣就是行列式不為 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]]
對於矩陣 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,是因為浮點數運算存在精度損失。
如果把矩陣看成乙個向量組,那麼秩就是線性無關向量的個數,也就是向量組的維度,概念比較複雜,有興趣的讀者可以繼續探索。矩陣的秩應該是小於等於行數與列數的最小值。
# 求矩陣 a 的秩 rank(a)
import numpy as np
a = np.mat([[1, 2],[3, 4]], int)
rank = np.linalg.matrix_rank(a)
print(rank)
# 輸出結果:
# 2
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]]
求解形如 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.]]
numpy 矩陣運算
numpy 通過matrix基類支援向量運算,下面是生產向量的方法 執行結果 雖然array與matrix形式上類似,但不是一回事哦 我們可以通過array生成matrix物件,matrix物件提供矩陣計算功能。from numpy import numpy 多維資料元件,不支援向量運用 a1 ar...
numpy矩陣遍歷
1 遍歷乙個numpy型別的矩陣 我原來一直以為和 這兩種寫法沒有區別,其實兩種效果完全不一樣,對比之後一般不建議這樣寫!coding utf 8 import numpy as np a np.array 1,2,3 4,5,6 print a.shape 2,3 print a 0 這樣寫,無論...
NumPy 矩陣乘法
numpy 支援的幾類矩陣乘法也很重要。你已看過了一些元素級乘法。你可以使用multiply函式或 運算子來實現。回顧一下,它看起來是這樣的 m np.array 1,2,3 4,5,6 m 顯示以下結果 array 1,2,3 4,5,6 n m 0.25 n 顯示以下結果 array 0.25,...