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

如何提升NumPy loadtxt读取数据的精度,避免数值舍入损失

NumPy loadtxt高精度数值读取精度损失解决方案

问题原因

默认情况下numpy.loadtxt会将浮点数值解析为float64类型,而float64的有效十进制精度仅为15~17位,你提供的示例数值十进制位数已经超过了float64的精度上限,因此会触发自动舍入,该现象是默认数据类型限制导致的,并非loadtxt本身的bug。

可行解决方案

方案1:指定更高精度的浮点类型读取

部分平台下NumPy支持longdouble扩展精度浮点类型,有效十进制位数可达18~19位,足以覆盖你示例中的数值精度需求,使用方式如下:

import numpy as np

# 读取时指定dtype为np.longdouble
data = np.loadtxt("你的文件路径.txt", dtype=np.longdouble)

# 验证精度时不要直接打印numpy数组,调用.item()取原生值查看
print(data[0].item())

方案2:使用Decimal类型完全保留十进制精度

如果longdouble仍无法满足精度要求,可以搭配Python标准库的Decimal类型读取,完全保留文本中的原始数值,不会做任何浮点舍入:

from decimal import Decimal
import numpy as np

# converters参数根据你的实际列数调整,也可以单独指定某几列使用Decimal转换
data = np.loadtxt("你的文件路径.txt", dtype=object, converters={col: Decimal for col in range(文件总列数)})

方案3:通过pandas中转读取

pandas的read_csv对高精度数值的解析适配更完善,也可以作为替代方案:

import pandas as pd
import numpy as np

# 读取时指定高精度dtype
df = pd.read_csv("你的文件路径.txt", header=None, dtype=np.longdouble)
# 转成numpy数组使用
data = df.to_numpy()

注意事项

  • NumPy默认打印数组时会自动截断浮点值的显示位数,验证精度时必须调用元素的.item()方法取到Python原生类型值,才能看到实际存储的完整精度。
  • 后续计算过程中需要保持全链路使用对应精度的类型,不要中途转为float64,否则仍会出现精度损失。

内容的提问来源于stack exchange,提问作者Ajinkya Bankar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 17:45:02