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

Tính log-determinant cho stack ma trận trong Python

numpy.linalg.slogdet() tính dấu và log-determinant (logarit tự nhiên của giá trị tuyệt đối định thức) cho stack ma trận. Tránh overflow/underflow khi định thức quá lớn/nhỏ. Trả về tuple (sign, logdet). Định thức = sign * exp(logdet).

Tham số

  • a (array_like): Stack ma trận vuông 2D (shape (..., M, M)).

Các bước thực hiện

Nhập NumPy, tạo stack 3 ma trận 2x2:

import numpy as np

arr = np.array([[[1, 2], [3, 4]],
                [[1, 2], [2, 1]],
                [[1, 3], [3, 1]]])
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)

# Định thức thường
print("\nĐịnh thức...\n", np.linalg.det(arr))

# Log-determinant
sign, logdet = np.linalg.slogdet(arr)
print("\nKết quả....\n", (sign, logdet))

Ví dụ hoàn chỉnh

import numpy as np

arr = np.array([[[1, 2], [3, 4]],
                [[1, 2], [2, 1]],
                [[1, 3], [3, 1]]])
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("\nĐịnh thức...\n", np.linalg.det(arr))
sign, logdet = np.linalg.slogdet(arr)
print("\nKết quả....\n", (sign, logdet))

Kết quả đầu ra

Mảng của chúng ta...
 [[[1 2]
   [3 4]]

  [[1 2]
   [2 1]]

  [[1 3]
   [3 1]]]
Số chiều...
 3
Kiểu dữ liệu...
 int64
Hình dạng...
 (3, 2, 2)
Định thức...
 [-2. -3. -8.]
Kết quả....
 (array([-1., -1., -1.]), array([0.69314718, 1.09861229, 2.07944154]))

Kiểm tra: -1 * exp(0.693) ≈ -2; -1 * exp(1.099) ≈ -3; -1 * exp(2.079) ≈ -8. ✓