Функция slogdet
Функция slogdet из подмодуля linalg вычисляет
знак и натуральный логарифм определителя квадратной матрицы.
В отличие от функции det, которая возвращает сам определитель,
slogdet возвращает кортеж из двух элементов: знак и логарифм модуля определителя.
Это особенно полезно, когда определитель очень мал или очень велик,
и его непосредственное вычисление может привести к переполнению или потере точности.
Функция принимает один обязательный параметр - квадратную матрицу.
Возвращаемое значение - кортеж (sign, logdet), где sign - это знак определителя
(1 для положительного, -1 для отрицательного, 0 для нулевого), а logdet - натуральный логарифм
абсолютного значения определителя. Если определитель равен нулю, то sign будет равен 0,
а logdet будет равен -inf.
Синтаксис
np.linalg.slogdet(a)
Пример
Вычислим знак и логарифм определителя для матрицы 2x2:
import numpy as np
arr = np.array([[1, 2], [3, 4]])
sign, logdet = np.linalg.slogdet(arr)
print(sign)
print(logdet)
print(np.exp(logdet) * sign)
Результат выполнения кода:
-1.0
0.6931471805599453
-2.0
В данном примере определитель матрицы равен -2, поэтому знак равен -1, а логарифм от 2 равен примерно 0.693.
Пример
Рассмотрим случай с нулевым определителем:
import numpy as np
arr = np.array([[1, 2], [2, 4]])
sign, logdet = np.linalg.slogdet(arr)
print(sign)
print(logdet)
Результат выполнения кода:
0.0
-inf
Определитель равен нулю, поэтому знак равен 0, а логарифм равен -бесконечности.
Пример
Применим функцию к единичной матрице:
import numpy as np
arr = np.eye(3)
sign, logdet = np.linalg.slogdet(arr)
print(sign)
print(logdet)
Результат выполнения кода:
1.0
0.0
Определитель единичной матрицы равен 1, поэтому знак равен 1, а логарифм от 1 равен 0.
Пример
Использование slogdet для матрицы большого размера с очень большим определителем:
import numpy as np
rng = np.random.default_rng(0)
arr = rng.integers(1, 10, size=(10, 10))
sign, logdet = np.linalg.slogdet(arr)
print(sign)
print(logdet)
Результат выполнения кода:
-1.0
16.11809565095832
В этом примере определитель матрицы имеет отрицательный знак, а его модуль равен exp(16.118) ≈ 1e7.