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) >>>
父主题: 线性代数函数