numpy格式转化成list后小数位发生变化

在使用numpy中,有一个需求是想将float32数据的小数截取一下,以减少所占内存,节省空间以及减少后续的计算时间。

numpy中有一些函数是可以定义精度的:

  • np.around(): 四舍五入,可指定精度
  • np.floor():向下取整数
  • np.ceil():向上取整数

按照上述的需求,应该采用 np.around()

np.around(a, decimals=0, out=None)

  • a:是输入的numpy数组
  • decimals是要保持的小数位数。默认值为0,如果为负,整数将四舍五入到小数点左侧的位置

在使用 np.around()函数之后,能够很好的完成上述需求,但是在转换成list格式保持成json文件就出现问题了:

import numpy as np

n = (np.random.random(10) * 30).astype(np.float32)

n2 = np.around(n, 2)
print(n2)

n2_list = n2.tolist()
print(n2_list)

可以看到,转成list之后小数点又不是想要保存的两位小数了,原因查了一下是,是格式的问题。

  • numpy中浮点数一般是使用的np.float32
  • python中浮点数一般是使用的float64,更精确一些,因此会出现上述问题

精度其实并没有被丢失,而是numpy的方式保存的精度要差一些,转化成list之后,float64有更为精确的表示。

对转成list的数据再做一次精度设置


n2_list2 = [round(i, 2) for i in n2_list]
print(n2_list2)

import json
json.dumps(n2_list2)

Original: https://blog.csdn.net/uncle_ll/article/details/122439405
Author: uncle_ll
Title: numpy格式转化成list后小数位发生变化

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/760579/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球