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. ✓