scipy.linalg.
det#
- scipy.linalg.det(a, overwrite_a=False, check_finite=True)[source]#
计算矩阵的行列式
行列式是一个标量,它是与相关方阵系数的函数。奇异矩阵的行列式值为零。
- 参数:
- a(…, M, M) array_like
用于计算行列式的输入数组。
- overwrite_abool, 可选
允许覆盖 a 中的数据(可能会提高性能)。
- check_finitebool, 可选
是否检查输入矩阵是否只包含有限数字。禁用可能会提高性能,但在输入确实包含无穷大或 NaN 时可能会导致问题(崩溃、无法终止)。
- 返回:
- det(…) float 或 complex
a 的行列式。对于堆叠数组,每个 (m, m) 切片(位于输入的最后两个维度)都会返回一个标量。例如,形状为 (p, q, m, m) 的输入将产生形状为 (p, q) 的结果。如果所有维度都是 1,则无论 ndim 如何,都会返回一个标量。
注意
行列式是通过使用 LAPACK 例程 'getrf' 对输入进行 LU 分解,然后计算 U 因子的对角线元素的乘积来计算的。
即使输入数组是单精度(float32 或 complex64),结果也将以双精度(float64 或 complex128)返回,以防止溢出。
示例
>>> import numpy as np >>> from scipy import linalg >>> a = np.array([[1,2,3], [4,5,6], [7,8,9]]) # A singular matrix >>> linalg.det(a) 0.0 >>> b = np.array([[0,2,3], [4,5,6], [7,8,9]]) >>> linalg.det(b) 3.0 >>> # An array with the shape (3, 2, 2, 2) >>> c = np.array([[[[1., 2.], [3., 4.]], ... [[5., 6.], [7., 8.]]], ... [[[9., 10.], [11., 12.]], ... [[13., 14.], [15., 16.]]], ... [[[17., 18.], [19., 20.]], ... [[21., 22.], [23., 24.]]]]) >>> linalg.det(c) # The resulting shape is (3, 2) array([[-2., -2.], [-2., -2.], [-2., -2.]]) >>> linalg.det(c[0, 0]) # Confirm the (0, 0) slice, [[1, 2], [3, 4]] -2.0