Python中numpy将float64数组转为int时出现数值异常是什么原因?
问题产生原因
- 本质是浮点运算精度误差和
astype('int')的截断规则共同导致的。 - 你自定义逆DFT的计算过程中,包含大量复数乘法、指数运算、累加操作,所有float64类型的运算都会引入微小的舍入误差。你打印出来的y看似是整数,只是numpy默认的打印配置隐藏了极小的小数部分,实际存储的float64数值并不是精确的整数:比如看似为
1.的元素实际值可能是0.9999999999999987,看似为-4.的元素实际值可能是-3.999999999999996,看似为2.的元素实际值可能是1.9999999999999982。 - numpy的
astype('int')转换逻辑是直接截断小数部分,而非四舍五入:上述例子里的0.9999999999999987截断后得到0,-3.999999999999996截断后得到-3,1.9999999999999982截断后得到1,和你遇到的偏差完全吻合。
你可以通过打印更高精度的数值验证该结论,执行代码:
print(np.array2string(y, precision=20))
就能看到每个元素的实际浮点值。
解决方法
转换为int前先对浮点值做四舍五入即可得到正确结果:
print(np.round(y).astype('int'))
内容的提问来源于stack exchange,提问作者Gerold
相关产品推荐
相关产品推荐

