linalg.slogdet
功能描述
计算数组行列式的符号和绝对值的(自然)对数。
如果数组具有非常小或非常大的行列式,那么对det的调用可能会下溢或上溢。对于这些问题,这个函数更稳健,因为它计算行列式的对数,而不是行列式本身。
必选输入参数
参数名 |
类型 |
说明 |
|---|---|---|
a |
array_like |
输入数组,必须是正方形二维数组。 |
可选输入参数
无。
返回数据
参数名 |
类型 |
说明 |
|---|---|---|
sign |
ndarray |
代表行列式符号的数字。对于实矩阵,这是1、0或-1。对于复矩阵,这是一个绝对值为1的复数(即它在单位圆上),否则为0。 |
logdet |
ndarray |
行列式绝对值的自然对数。 |
如果行列式为零,则sign为0,logdet为-Inf。在所有情况下,行列式等于sign * np.exp(logdet)。
示例
>>> import numpy as np
>>> #二维数组[[a,b],[c,d]],行列式结果 ad - bc
>>> a = np.array([[1,2],[3,4]])
>>> a
array([[1, 2],
[3, 4]])
>>>
>>> (sign, logdet) = np.linalg.slogdet(a)
>>> (sign, logdet)
(-1.0, 0.6931471805599455)
>>>
>>> sign * np.exp(logdet)
-2.0000000000000004
>>>
>>>
>>> a = np.array([[[1,2],[3,4]], [[1,2],[2,1]], [[1,3],[3,1]]])
>>> a
array([[[1, 2],
[3, 4]],
[[1, 2],
[2, 1]],
[[1, 3],
[3, 1]]])
>>>
>>> (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.])
>>>
>>>
>>> np.linalg.det(np.eye(500) * 0.1)
0.0
>>> np.linalg.slogdet(np.eye(500) * 0.1)
(1.0, -1151.2925464970251)
>>>
父主题: 线性代数函数