Làm quen với ma trận

Posted by Hao Do on August 8, 2022

Làm quen với ma trận

Giới thiệu một số thao tác cơ bản với ma trận.

Import thư viện trước khi thực hiện code

1
import numpy as np

Khởi tạo matrix

1
2
3
4
5
6
7
# tao mot matrix
A = np.array([
    [1, 2, 3],
    [4, 5, 1]
], dtype=np.float64)
print(A)
print(type(A))

Ma trận đơn vị

1
2
3
4
5
'''ma tran don vi'''
A = np.eye(3)
print(A) # duong cheo only 1
A = np.eye(3, k = -1) # gia tri 1 o duong cheo ben trai 
print(A)

Tạo ma trận chéo với vector

1
2
3
4
''' tao ma tran cheo voi vector'''
A = np.diag([1, 3, 5])
print(A)
print(np.diag(A)) # gia tri duong cheo

Tổng theo cộng, hàng, chẵn lẻ

1
2
3
4
5
6
7
8
9
10
11
12
A = np.array([
    [1, 3, 4, 5],
    [2, 3, 6, 1], 
    [3, 6, 9, 0]
], dtype=np.float64)
print(A)
print(A.shape)
print(np.sum(A[:, 1::2])) # tong cac cot le
print(np.sum(A[::2, :])) # tong cac hang chan
print(np.sum(A, axis = 0)) # tong theo cot
print(np.sum(A, axis = 1)) # tong theo hang
print(np.sum(A, axis = 0, keepdims = True)) # giu chieu (1 * 4)

Tạo ma trận ngẫu nhiên

1
2
3
# tao mot matrix ngau nhien
A = np.random.randn(2, 3)
print(A)

Frobenious Norm

Tổng bình phương các phần tử của ma trận

1
2
3
4
5
6
7
8
#frobenious norm (tong binh phuong cac phan tu ma tran)
A = np.random.randn(3, 4)
A = np.array([
    [1, 3],
    [2, 5]
], dtype=np.float64)
fn = np.sqrt(np.sum(A ** 2)) # frobenious norm
print(fn)

Phép nhân từng phần tử ma trận

sử dụng phép nhân wise-element

1
2
3
4
5
6
# phep nhan ma tran A * B (nhan tung chi so voi nhau)
A = np.random.randn(2, 3)
B = np.random.randn(2, 3)
print(A)
print(B)
print(A * B)

Kiểm tra tính gần nhau của 2 ma trận

1
2
3
4
5
6
# kiem tra tinh gan nhau cua 2 ma tran
A = np.random.randn(2, 3)
B = np.random.randn(2, 3)
Z = A - B
fn_2 = np.sqrt(np.sum(Z ** 2)) ** 2
print(fn_2) # binh phuong cua fn (A - B)

Ma trận chuyển vị

1
2
3
4
5
6
7
8
A = np.array([
    [1, 2, 3],
    [4, 6, 1]
], dtype=np.float64)
print(A)
print(A.T) #ma tran chuyen vi (transpose)
print(A.shape)
print(A.T.shape)

Vector, reshape, matrix

1
2
3
4
5
6
# tao  vector --> reshape --> matrix
A = np.arange(12).reshape(3, -1) #-1: may tu tinh
print(A)
print(A.shape)
B = np.random.randn(3, 4)
print(A * B) # nhan theo dang element-wise (theo cap)

Phép nhân ma trận

1
2
3
4
5
6
7
# nhan 2 ma tran (mxn) vs (nxp)
A = np.arange(12).reshape(3, -1)
B = np.random.randn(4, 2)
C = np.dot(A, B) # nhan ma tran
print(A)
print(B)
print(C) #C.shape = (3, 2)

Phép Frobineus norm nhanh

1
2
3
4
5
6
7
8
9
# Frobineus norm (tinh nhanh)
A = np.random.randn(2, 3)

C = np.dot(A, A.T) #C ma tran vuong.
fn_2_new = np.sum(np.diag(C))
print(fn_2_new)

fn_2_new2 = np.trace(C)
print(fn_2_new2)

Khởi tạo bộ sinh số ngẫu nhiên

1
2
3
4
5
6
7
8
9
10
'''khoi tao bo sinh so ngau nhien'''
np.random.seed()

v1 = np.random.randn() #1 value vo huong
v2 = np.random.randn(3) # vector
v3 = np.random.randn(2, 3) #matrix, randn (random normal)

print(v1)
print(v2)
print(v3)

Sử dụng hoán vị

1
2
#hoan vi
np.random.permutation(5) # permutation: hoan vi

Full ipynb

Tài liệu tham khảo

Machine learning cơ bản

Hết.