當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python numpy linalg.slogdet用法及代碼示例


本文簡要介紹 python 語言中 numpy.linalg.slogdet 的用法。

用法:

linalg.slogdet(a)

計算數組行列式的符號和(自然)對數。

如果數組具有非常小或非常大的行列式,則對 det 的調用可能會上溢或下溢。該例程對此類問題更加穩健,因為它計算行列式的對數而不是行列式本身。

參數

a (…, M, M) 數組

輸入數組,必須是一個方形二維數組。

返回

sign (…)數組

代表行列式符號的數字。對於實數矩陣,這是 1、0 或 -1。對於複數矩陣,這是一個絕對值為 1 的複數(即它在單位圓上),否則為 0。

logdet (…)數組

行列式絕對值的自然對數。

如果行列式為零,則numpy.sign將為 0 並且日誌將會
-Inf。在所有情況下,行列式都等於 sign * np.exp(logdet)

注意

廣播規則適用,有關詳細信息,請參閱 numpy.linalg 文檔。

使用 LAPACK 例程 z/dgetrf 通過 LU 分解計算行列式。

例子

二維數組 [[a, b], [c, d]] 的行列式是 ad - bc

>>> a = np.array([[1, 2], [3, 4]])
>>> (sign, logdet) = np.linalg.slogdet(a)
>>> (sign, logdet)
(-1, 0.69314718055994529) # may vary
>>> sign * np.exp(logdet)
-2.0

為一堆矩陣計算log-determinants:

>>> a = np.array([ [[1, 2], [3, 4]], [[1, 2], [2, 1]], [[1, 3], [3, 1]] ])
>>> a.shape
(3, 2, 2)
>>> sign, logdet = np.linalg.slogdet(a)
>>> (sign, logdet)
(array([-1., -1., -1.]), array([ 0.69314718,  1.09861229,  2.07944154]))
>>> sign * np.exp(logdet)
array([-2., -3., -8.])

此例程在普通 det 不成功的情況下成功:

>>> np.linalg.det(np.eye(500) * 0.1)
0.0
>>> np.linalg.slogdet(np.eye(500) * 0.1)
(1, -1151.2925464970228)

相關用法


注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.linalg.slogdet。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。