我有一个3D数组。数组的范围是-100.0到2048.0,它们是浮点数。我想决定在PYTHON中应该使用哪种类型的数据float / float16 / float32 ...,例如它的大小尽可能小。目前,我使用float32来保存数组(1000个3D阵列),结果为2GB。我可以通过使用其他类型(如float / float16?
)来减小其大小答案 0 :(得分:2)
有关浮动类型的一些信息可以使用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
---------------------------------------------------------------