行列式定义只有加法、减法和乘法。因此,具有整数元素的矩阵的行列式必须是 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内置了长整数。
如何获得行列式的精确整数值而不是近似浮点值?