Để tính hạng (rank) ma trận bằng phương pháp phân rã giá trị kỳ dị (SVD), dùng numpy.linalg.matrix_rank(). Hạng = số giá trị kỳ dị > ngưỡng tol. Mặc định tol = S.max() * max(M, N) * eps.
Tham số
- A (array_like): Ma trận hoặc stack ma trận đầu vào.
- tol (float, tùy chọn): Ngưỡng coi giá trị kỳ dị là 0.
- hermitian (bool, tùy chọn): True nếu ma trận Hermitian.
Các bước thực hiện
Nhập thư viện, tạo ma trận đơn vị 5x5:
import numpy as np
from numpy.linalg import matrix_rank
arr = np.eye(5)
print("Mảng của chúng ta...\n", arr)
print("\nSố chiều...\n", arr.ndim)
print("\nKiểu dữ liệu...\n", arr.dtype)
print("\nHình dạng...\n", arr.shape)
# Hạng ma trận đơn vị
print("\nHạng...\n", matrix_rank(arr))
# Làm ma trận thiếu hạng: đặt phần tử cuối = 0
arr[-1, -1] = 0.
print("\nHạng cập nhật (Ma trận thiếu hạng)...\n", matrix_rank(arr))
Ví dụ hoàn chỉnh
import numpy as np
from numpy.linalg import matrix_rank
arr = np.eye(5)
print("Mảng của chúng ta...\n", arr)
print("\nSố chiều...\n", arr.ndim)
print("\nKiểu dữ liệu...\n", arr.dtype)
print("\nHình dạng...\n", arr.shape)
print("\nHạng...\n", matrix_rank(arr))
arr[-1, -1] = 0.
print("\nHạng cập nhật (Ma trận thiếu hạng)...\n", matrix_rank(arr))
Kết quả đầu ra
Mảng của chúng ta...
[[1. 0. 0. 0. 0.]
[0. 1. 0. 0. 0.]
[0. 0. 1. 0. 0.]
[0. 0. 0. 1. 0.]
[0. 0. 0. 0. 1.]]
Số chiều...
2
Kiểu dữ liệu...
float64
Hình dạng...
(5, 5)
Hạng...
5
Hạng cập nhật (Ma trận thiếu hạng)...
4