NumPy参考 >例行程序 >线性代数(numpy.linalg) > numpy.linalg.slogdet
numpy.linalg.
slogdet
(a )[来源] ¶计算数组行列式的符号和(自然)对数。
如果数组的行列式很小或很大,则对的调用
det
可能会溢出或下溢。此例程针对此类问题更健壮,因为它计算行列式而不是行列式本身的对数。
输入数组必须是正方形的二维数组。
代表行列式符号的数字。对于实数矩阵,该值为1、0或-1。对于复数矩阵,这是一个绝对值为1(即在单位圆上)或0的复数。
行列式绝对值的自然对数。
也可以看看
笔记
1.8.0版中的新功能。
广播规则适用,numpy.linalg
有关详细信息,请参阅文档。
1.6.0版中的新功能。
行列式使用LAPACK例程通过LU分解计算z/dgetrf
。
例子
二维数组的行列式为:[[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
计算一堆矩阵的对数行列式:
>>> 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)