Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Python

Trả về hạng ma trận thiếu hạng dùng SVD trong Python

Để 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