当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


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。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。