繁体   English   中英

numpy 的 float16 数据类型是否功能失调?

[英]Is float16 datatype for numpy disfunctional?

这个主要问题的例子:

c=np.array([2600.0])

In [3]: c=c.astype(np.float16)

In [4]: c

Out[4]: array([ 2600.], dtype=float16)

一切都很好,然后:

In [5]: c=np.array([2583.0])

In [6]: c=c.astype(np.float16)

In [7]: c

Out[7]: array([ 2584.], dtype=float16)

所以2583.0变成2584.0,很酷,不会造成任何问题!!!! 当我将大数组转换为 np.float16 时,我还看到 2583.0 以相反的方向转换为 2582.0。

我花了一整天的时间试图找到这个错误,但我从未想过我的数据会发生这种情况,这是怎么回事? 我正在使用 float16 来限制我的内存消耗,但如果它很危险,我将继续使用 32 位。

任何人都可以对此有所了解吗?

非常感谢大家。

16 位浮点数不是非常精确的数据类型。 它只有 11 位精度。 它不能精确表示大于 2048 的所有整数。在 2048 和 4096 之间,只有偶数整数才有精确表示。 奇数将四舍五入为最接近的偶数之一。

您可以在Wikipedia 页面上阅读有关半角浮点数的更多信息。 以下是您的问题最重要的一段话:

整数值的精度限制

  • 可以精确表示 0 到 2048 之间的整数
  • 2049 到 4096 之间的整数四舍五入为 2 的倍数(偶数)
  • 4097 到 8192 之间的整数四舍五入为 4 的倍数

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM