【问题标题】:Which type should be used to save data?应该使用哪种类型来保存数据?
【发布时间】:2017-05-14 07:26:19
【问题描述】:
我有一个 3D 数组。数组的范围是 -100.0 到 2048.0,它们是浮点数。我想决定在PYTHON中应该使用哪种类型的数据float/float16/float32...,比如它的大小尽可能的小。目前,我正在使用 float32 保存数组(1000 个 3D 数组),结果为 2GB。我可以通过使用其他类型(例如 float/float16)来减小它的大小吗?
【问题讨论】:
标签:
python
arrays
python-2.7
【解决方案1】:
可以使用 numpy 的 finfo 函数找到有关浮点类型的一些信息。如下所示,float16 的最大值为 65504.0,因此值范围(-100.0 到 2048.0)将适合。问题可能是 epsilon(下面的eps 和epsneg)太大,以至于两个不同的值将被视为相同。使用float32,epsilon 值会小得多,因此您可以以更高的精度表示值。
> import numpy as np
> print(np.finfo(np.float16))
Machine parameters for float16
---------------------------------------------------------------
precision = 3 resolution = 1.00040e-03
machep = -10 eps = 9.76562e-04
negep = -11 epsneg = 4.88281e-04
minexp = -14 tiny = 6.10352e-05
maxexp = 16 max = 6.55040e+04
nexp = 5 min = -max
---------------------------------------------------------------
> print(np.finfo(np.float32))
Machine parameters for float32
---------------------------------------------------------------
precision = 6 resolution = 1.0000000e-06
machep = -23 eps = 1.1920929e-07
negep = -24 epsneg = 5.9604645e-08
minexp = -126 tiny = 1.1754944e-38
maxexp = 128 max = 3.4028235e+38
nexp = 8 min = -max
---------------------------------------------------------------