关于使用numpy savetxt保存文件时出现精度丢失的技术咨询
解决numpy.savetxt保存时精度丢失(浮点数被截断)的问题
哦,这个坑我之前踩过!问题根本不是np.savetxt的格式设置,而是你创建的line数组的数据类型在搞鬼。
问题原因分析
你控制台打印的30+i*slope是计算后的原始浮点数,但如果你的line数组是整数类型(比如默认的int32/int64),当你把浮点数赋值给数组元素时,numpy会自动将浮点数截断为整数(直接去掉小数部分)。比如你计算出的30.5,赋值给int类型的数组元素后,实际存储的是30——而np.savetxt只是忠实地把数组里存储的值按格式输出,所以就出现了文件里的30.000000。
你可以做个小验证:在循环里加一行打印数组的实际值:
print("数组中实际存储的值:", line[2*i])
你会发现这里输出的就是被截断后的整数,和控制台打印的计算值不一样。
解决方案
只需要确保line数组是浮点类型即可,有两种简单的方式:
- 初始化时指定浮点类型:
# 创建一个长度为48的空浮点数组 line = np.empty(48, dtype=np.float64) # 或者用zeros初始化,同样指定float类型 line = np.zeros(48, dtype=float) - 赋值时显式转换为浮点数(不如第一种彻底,仅作为补充):
line[2*i] = float(30+i*slope) line[2*i+1] = float(40+i*slope)
修改后再运行,保存的txt文件里就能正确显示30.500000这类带小数的数值了。
内容的提问来源于stack exchange,提问作者Xu Siyuan
相关产品推荐
相关产品推荐

