numpy.float64转数组时小数点后精度从16位降为5位如何解决
Numpy数组转换后浮点数精度保留方案
核心原因说明
你观察到的小数点后位数减少并非真实的精度丢失,属于Numpy默认打印配置的展示限制:默认仅显示浮点数小数点后5位,数组底层存储的numpy.float64值仍完整保留16位精度,和原始计算值完全一致。
验证精度无丢失的方法
直接对比原始变量和数组内元素值即可确认:
# 输出为True则证明存储值完全一致,无精度损失 print(ham_log == log_class_priors[0]) # 格式化打印数组内元素,可查看完整精度值 print("{0:.16f}".format(log_class_priors[0]))
调整打印显示完整精度
如果需要在打印数组时直接展示全部小数位,修改Numpy全局打印配置即可:
# 设置打印精度为16位,匹配float64的有效位数 np.set_printoptions(precision=16) # 此时打印数组会显示完整的16位小数 print(log_class_priors)
代码优化建议
你的原有写法中astype(float)属于冗余操作:原始计算值已经是numpy.float64类型,np.array默认会继承输入元素的类型,可简化为显式指定dtype的写法,逻辑更清晰:
log_class_priors = np.array([ham_log, spam_log], dtype=np.float64)
内容的提问来源于stack exchange,提问作者N K
相关产品推荐
相关产品推荐

