---
title: linalg.slogdet
description: "计算数组行列式的符号和绝对值的（自然）对数。"
url: https://www.hikunpeng.com/document/detail/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_1112.html
sourcePath: /source/zh/kunpenghpcs/hpckit/devg/kunpengaccel_kml_1112.html
indexId: dfdcc21434ebd2c06658014552edfe43ba6c157ed0a38dbaa688f5dc5fa9370361
---
# 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)
>>>
```
