numpy.linalg.slogdet

numpy.linalg.slogdet(a)

Функция linalg.slogdet() вычисляет знак и натуральный логарифм определителя (детерминанта) матрицы.

Данная функция очень полезна, если определитель матрицы может оказаться очень большим или очень маленьким числом для используемого типа данных. Вв этом случае вызов обычной функции np.det() выдаст ошибку. linalg.slogdet() вычисляет не сам определитель, а его натуральный логарифм, поэтому ошибки не возникает.

Параметры:
a - массив NumPy или подобнй массиву объект.
Это может быть толко "квадратный" двумерный массив, т.е. квадратная матрица. Если это многомерный массив, то две его последние оси должны быть равны, в этом случае он рассматривается как массив матриц и функция обрабатывает отдельно каждую из них.
Возвращает:
результат - Кортеж из двух чисел.
Первое число (sign) указывает на знак детерминанта. Для матриц из вещественных чисел, возвращается -1, 0 или 1. Для комплексных чисел возвращается комплексное число, на единичной окружности (абсолютное значение равно 1). Второе число (ln(det)) является натуральным логарифмом абсолютного значения определителя. Если определитель равен 0 то вторым числом будет -np.inf.

Замечание

Истинный определитель вычисляется командой sign*np.exp(ln(det)).

Смотрите так же:
det


Примеры

>>> import numpy as np
>>> from numpy import linalg as LA
>>> 
>>> a = np.random.randint(10000, 100000, size = (6, 6))
>>> a
array([[13636, 58257, 16045, 78267, 30907, 40285],
       [54127, 91777, 90254, 93890, 84216, 48649],
       [82449, 85894, 94853, 65116, 69579, 61136],
       [62764, 92613, 41913, 72552, 24291, 74395],
       [89416, 10137, 54272, 52966, 63883, 91378],
       [29764, 88606, 65065, 96706, 61970, 62807]])
>>> 
>>> 
>>> LA.det(a)
1.8761954613439368e+26
>>> 
>>> LA.slogdet(a)
(1.0, 60.49645845348361)
>>> 
>>> 
>>> a = np.random.randint(10000, 100000, size = (4, 4))
>>> b = 1j*np.random.randint(10000, 100000, size = (4, 4))
>>> z = a + b
>>> z
array([[64934.+67054.j, 84824.+32269.j, 61112.+33436.j, 12192.+77731.j],
       [61272.+41472.j, 78133.+20198.j, 17306.+12503.j, 78805.+97270.j],
       [84160.+77734.j, 72274.+67676.j, 28286.+43428.j, 96883.+94718.j],
       [14267.+12412.j, 38178.+42180.j, 11718.+96354.j, 99460.+15195.j]])
>>> 
>>> LA.det(z)
(3.461202383054828e+18-2.8452824088699175e+19j)
>>> 
>>> LA.slogdet(z)
((0.1207568602004703-0.9926821146341482j), 44.80212388695727)