鱼C论坛

 找回密码
 立即注册
查看: 2195|回复: 7

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

[复制链接]
发表于 2021-9-16 11:32:27 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import numpy as np
import numpy.linalg as nl
x1=np.array([[1.,2.,3],[4.,5.,6.],[7.,8.,9,]])
print(x1)
print(nl.det(x1))

[[1. 2. 3.]
[4. 5. 6.]
[7. 8. 9.]]
-9.51619735392994e-16
最佳答案
2021-9-16 12:31:22
ALNY 发表于 2021-9-16 12:20
那请问有什么处理方法吗



呃,这误差没办法处理了,这是计算机存储数据时候产生的误差,但是对结果进行处理还是可以的:
import numpy as np
import numpy.linalg as nl
x1=np.array([[1.,2.,3],[4.,5.,6.],[7.,8.,9,]])
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2021-9-16 11:59:07 | 显示全部楼层


因为 Python 浮点数是有误差的

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-16 12:20:01 | 显示全部楼层
Twilight6 发表于 2021-9-16 11:59
因为 Python 浮点数是有误差的

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

那请问有什么处理方法吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-16 12:21:27 | 显示全部楼层
為什麼我用你的代碼執行結果為0.0?
import numpy as np
import numpy.linalg as nl
x1=np.array([[1.,2.,3],[4.,5.,6.],[7.,8.,9,]])
print(x1)
print(nl.det(x1))
[[1. 2. 3.]
 [4. 5. 6.]
 [7. 8. 9.]]
0.0
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-9-16 12:24:26 | 显示全部楼层
傻眼貓咪 发表于 2021-9-16 12:21
為什麼我用你的代碼執行結果為0.0?

我也很奇怪 是numpy版本问题么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-16 12:31:22 | 显示全部楼层    本楼为最佳答案   
ALNY 发表于 2021-9-16 12:20
那请问有什么处理方法吗



呃,这误差没办法处理了,这是计算机存储数据时候产生的误差,但是对结果进行处理还是可以的:
import numpy as np
import numpy.linalg as nl
x1=np.array([[1.,2.,3],[4.,5.,6.],[7.,8.,9,]])
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
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

确实只能处理结果了....
刚刚试了下  这个好神奇啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2021-9-16 12:56:59 | 显示全部楼层
本帖最后由 傻眼貓咪 于 2021-9-16 12:58 编辑

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

好像只有十进制 0.1 才会这样
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-6 18:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表