You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 16:07:42