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