【问题标题】: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(下面的epsepsneg)太大,以至于两个不同的值将被视为相同。使用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
---------------------------------------------------------------

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-08
    • 1970-01-01
    • 1970-01-01
    • 2011-06-06
    • 2012-11-07
    • 2013-03-21
    • 1970-01-01
    相关资源
    最近更新 更多