小编pyc*_*der的帖子

整数 NxN 矩阵的精确行列式

行列式定义只有加法、减法和乘法。因此,具有整数元素的矩阵的行列式必须是 integer

但是numpy.linalg.det()返回一个“稍微关闭”的浮点数:

>>> import numpy
>>> M = [[-1 if i==j else 1 for j in range(7)] for i in range(7)]
>>> numpy.linalg.det(M)
319.99999999999994
Run Code Online (Sandbox Code Playgroud)

对于更大的矩阵,情况会变得更糟:

>>> M = [[-1024 if i==j else 1024 for j in range(7)] for i in range(7)]
>>> numpy.linalg.det(M)
3.777893186295698e+23
>>> "%.0f" % numpy.linalg.det(M)
'377789318629569805156352'
Run Code Online (Sandbox Code Playgroud)

这是错误的!我确定正确答案是:

>>> 320 * 1024**7
377789318629571617095680
Run Code Online (Sandbox Code Playgroud)

当然,对于一个大矩阵,它可能是一个相当长的整数。但是python内置了长整数。

如何获得行列式的精确整数值而不是近似浮点值?

python algorithm math linear-algebra

5
推荐指数
2
解决办法
207
查看次数

标签 统计

algorithm ×1

linear-algebra ×1

math ×1

python ×1