You are on page 1of 7

BÀI SOẠN CHƯƠNG 5 XỬ LÍ TIẾNG NÓI:

from numpy import array


Ta có thể khởi tạo ma trận với NumPy bằng np.array:

np.array(object, dtype=None, ndmin=0
Trong đó:

 Object: một mảng 2 chiều, ta có thể sử dụng một list của list.
 dtype: kiểu dữ liệu của các phần tử trong ma trận
 ndmin: số chiều tối thiểu khi return object, nên đặt = 2 để tiện cho việc indexing
ma trận cho Machine Learning.
 Ta khởi tạo vector như ma trận nhưng chỉ có 1 cột (mảng 1 chiều). Ta có thể
xem đây là 1 List.

14.3 Phân tích LU:


# LU decomposition
from numpy import array
from scipy.linalg import lu
# define a square matrix
A = array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(A)
# factorize
P, L, U = lu(A)
print(P)
print(L)
print(U)
# reconstruct
B = P.dot(L).dot(U)
print(B)
Giải Thích:
là ta phân tích ma trận thành tích của hai ma trận tam giác dưới và tam giác trên
Tương ứng
 L: là ma trận tam giác dưới
 U là ma trận tam giác trên
 P là một ma trận hoán vị nghĩa là P chỉ gồm 0 và 1 và chỉ có duy nhất một
phần tử 1 trên mỗi dòng và cột.

14.4 phân tích QR


# QR decomposition
from numpy import array
from numpy.linalg import qr
# define rectangular matrix
A = array([
[1, 2],
[3, 4],
[5, 6]])
print(A)
# factorize
Q, R = qr(A, 'complete')
print(Q)
print(R)
# reconstruct
B = Q.dot(R)
print(B)
Giải Thích:
Một Ma Trận Am x n được phân tích thành dạng:
Am x n=¿ U m x n ∑ m x n ¿

Trong đó, U,V là các ma trận trực giao, Σ là ma trận đường chéo không vuông với
các phần tử trên đường chéo σ1 ≥ σ2≥⋯≥σr ≥ 0 = 0=⋯=0 σ1 ≥ σ2≥ ⋯ ≥ σr≥ 0=
0=⋯=0 và r là rank của ma trận A. Lưu ý rằng mặc dù Σ không phải ma trận vuông,
ta vẫn có thể coi nó là ma trận chéo nếu các thành phần khác không của nó chỉ
nằm ở vị trí đường chéo, tức tại các vị trí có chỉ số hàng và chỉ số cột là như nhau.
Số lượng các phần tử khác 0 trong Σ chính là rank của ma trận A.
Ma Trận A được Phân tích thành hai ma trận Q và R ( Q và R được gọi là hai Ma
Trận Trực Ảo)
B = Q.dot(R)

 Nhân hai ma trận lại với nhau


15.4 phân tích Cholesky
# Cholesky decomposition
from numpy import array
from numpy.linalg import cholesky
# define symmetrical matrix
A = array([
[2, 1, 1],
[1, 2, 1],
[1, 1, 2]])
print(A)
# factorize
L = cholesky(A)
print(L)
# reconstruct
B = L.dot(L.T)
print(B)

Theo phân tích Cholesky, một ma trận vuông X có thể được biểu diễn dưới
dạng tích của ma trận tam giác dưới L và chuyển vị của nó tức LT:
X = L*LT
Cách để tìm ma trận tam giác dưới L (công thức tham khảo)
15.5 Tìm trị riêng và vector riêng
# eigendecomposition
from numpy import array
from numpy.linalg import eig
# define matrix
A = array([
[1, 2, 3],
[4, 5, 6],
[7, 8, 9]])
print(A)
# factorize
values, vectors = eig(A)

print(values)
print(vectors)

ở đây để minh họa cho dễ mình sẽ lấy ma trận cấp 2x2:


1) Định Nghĩa: Cho một ma trận vuông A kích thước n×n, vector cột v có
kích thước n×1 và một số vô hướng λ. Nếu Av=λv thì v là vector
riêng của A và λ là trị riêng của A.
2) Cách tìm vector riêng và giá trị riêng:
 Tìm định thức và giải phương trình sau:
 det|A−λI|=0
 ta có ma trận như sau:

[ 5 2]
A= 9 2

5 2 λ 0 5−λ 2
|[ ] [ ]| |[
det|A−λI| = det 9 2 − 0 λ = det 9 2−λ ]|
= (5−λ)(2−λ)−18 =(λ−8)(λ+1)=0
λ=8
λ = -1
 giá trị riêng là [ 8. -1.]
khi đã có giá trị riêng rồi ta đi tìm vector riêng:
với λ = 8
5 2 x x 5 x+2 y x
[ ][ ] [ ] [
Av = 9 2 y = 8 y => 9 x+2 y =¿8 y ] []
X=2,y=3

[ 2]
V1 = 3

Tương tự cho V2 = −3 [1]


Ta được 2 vector riêng:
Chuẩn hóa một vector thì ta sẽ lấy từng giá trị chia cho độ dài vector.
- Eigenvalue = 8 có Eigenvector [2, 3] = [2/căn(13) 3/căn(13)] = [0.5547002,
0.83205029]
- Eigenvalue = -1 có Eigenvector [1, -3] = [1/căn(10) -3/căn(10)] = [0.31622777,
-0.9486833]

You might also like