ALNY 发表于 2021-9-16 11:32:27

为啥我使用numpy计算行列式时,为0的行列式它不等于0而是等于一个很小的数啊

import numpy as np
import numpy.linalg as nl
x1=np.array([,,])
print(x1)
print(nl.det(x1))

[

]
-9.51619735392994e-16

Twilight6 发表于 2021-9-16 11:59:07



因为 Python 浮点数是有误差的

导致最终结果为一个非常小的数,这么小的数视为零即可

ALNY 发表于 2021-9-16 12:20:01

Twilight6 发表于 2021-9-16 11:59
因为 Python 浮点数是有误差的

导致最终结果为一个非常小的数,这么小的数视为零即可

那请问有什么处理方法吗{:5_99:}

傻眼貓咪 发表于 2021-9-16 12:21:27

為什麼我用你的代碼執行結果為0.0?
import numpy as np
import numpy.linalg as nl
x1=np.array([,,])
print(x1)
print(nl.det(x1))[

]
0.0

ALNY 发表于 2021-9-16 12:24:26

傻眼貓咪 发表于 2021-9-16 12:21
為什麼我用你的代碼執行結果為0.0?

我也很奇怪 是numpy版本问题么

Twilight6 发表于 2021-9-16 12:31:22

ALNY 发表于 2021-9-16 12:20
那请问有什么处理方法吗


呃,这误差没办法处理了,这是计算机存储数据时候产生的误差,但是对结果进行处理还是可以的:

import numpy as np
import numpy.linalg as nl
x1=np.array([,,])
print(x1)
print(round(nl.det(x1),10))

楼上的结果为 0.0 ,可能是因为计算机存储方式不同的原因吧,就比如:

>>> 0.1+0.1-0.2
0.0

>>> 0.1+0.7-0.8
-1.1102230246251565e-16

ALNY 发表于 2021-9-16 12:35:44

Twilight6 发表于 2021-9-16 12:31
呃,这误差没办法处理了,这是计算机存储数据时候产生的误差,但是对结果进行处理还是可以的:




确实只能处理结果了....
刚刚试了下这个好神奇啊

傻眼貓咪 发表于 2021-9-16 12:56:59

本帖最后由 傻眼貓咪 于 2021-9-16 12:58 编辑

学到了
print(0.1+0.7-0.8)-1.1102230246251565e-16

好像只有十进制 0.1 才会这样
页: [1]
查看完整版本: 为啥我使用numpy计算行列式时,为0的行列式它不等于0而是等于一个很小的数啊