鱼C论坛

 找回密码
 立即注册
查看: 6255|回复: 5

关于科学计算中小数点位数处理的问题

[复制链接]
发表于 2015-4-15 13:53:49 | 显示全部楼层 |阅读模式
50鱼币
暂时找不到原因为何,但是感觉是numpy在处理float变量时精度方面的问题,遇到下面的种奇怪的情况
  1. import pickle
  2. with open("num.txt", "rb") as fp:
  3.     temp = pickle.load(fp)
  4. print(temp[0], temp[1])
  5. print(temp[0] == temp[1])
复制代码
输出结果为
  1. >>>
  2. 2.87734318586 2.87734318586
  3. False
  4. >>>
复制代码
肉眼观察两个数字完全相等,但是判断两数是否相等时显示False
另外做了一个实验如下
  1. >>> a = 2.87734318586
  2. >>> b = 2.87734318586
  3. >>> a == b
  4. True
  5. >>>
复制代码
PS:说一下出现这个问题的背景,在我的程序中得到了一个实对称的矩阵K(n*n),自己然后另外一个值全为1/n的矩阵one(n*n),然后得到新的矩阵K_new = K - K*one - one*K + one*K*one,这里的*表示矩阵乘法,按道理说这里的K_new矩阵应该是实对称矩阵,特征值应该为实数,但是我分析得到的特征值为复数,然后我将K_new中对应位置不相等的两个数组成元组用pickle.dump存放在test.txt中,然后作了上面的实验
附件中是我的num.txt文件 num.rar (18.81 KB, 下载次数: 2)


最佳答案

查看完整内容

你那个txt里的文件数据本身就是不一样的啦。 (2.877343185855147, 2.8773431858551475) 这个是我下载的数据。 print是四舍五入了。 不过若是这样一个元组打印的话不会四舍五入。但是以文件形式打开就会四舍五入,不知道为啥。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-15 13:53:50 | 显示全部楼层
你那个txt里的文件数据本身就是不一样的啦。
(2.877343185855147, 2.8773431858551475)
这个是我下载的数据。
print是四舍五入了。
不过若是这样一个元组打印的话不会四舍五入。但是以文件形式打开就会四舍五入,不知道为啥。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-4-15 17:53:50 | 显示全部楼层
求解答啊~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2015-4-15 18:24:55 | 显示全部楼层
本帖最后由 lightninng 于 2015-4-15 18:26 编辑
wei_Y 发表于 2015-4-15 18:18
你那个txt里的文件数据本身就是不一样的啦。
(2.877343185855147, 2.8773431858551475)
这个是我下载的数 ...

谢啦,原来print会自动四舍五入啊,长见识了~~我下午倒腾了一下午这个问题,三点多的时候才想起来,把所有的矩阵元素都转化成str类型发现确实不一样,然后用round函数把所有的矩阵元素四舍五入到小数点后8位,终于判断实对称矩阵成功了~~
费了我一下午的时间
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-4-22 10:20:03 | 显示全部楼层
wei_Y 发表于 2015-4-15 13:53
你那个txt里的文件数据本身就是不一样的啦。
(2.877343185855147, 2.8773431858551475)
这个是我下载的数 ...

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

使用道具 举报

发表于 2015-7-7 11:31:43 | 显示全部楼层
print四舍五入引起的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-25 21:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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