numpy 矩陣 秩 Numpy 矩陣

2021-10-14 01:33:31 字數 4715 閱讀 2420

機器學習中會用到大量的數學操作,而 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,...