在使用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/
转载文章受原作者版权保护。转载请注明原作者出处!