【问题标题】:How to get Python ufuncs to return floats larger than the normal float size limit?如何让 Python ufuncs 返回大于正常浮点大小限制的浮点数?
【发布时间】:2021-10-08 08:39:24
【问题描述】:

我有一个 NumPy 数组,其中包含一个略大于 260 的数字,我正在其上运行来自 scipy.specialgamma ufunc,它当前返回数组的此条目的 inf,因为结果结束1e514,Python 通常可以处理的最大浮点数约为 1.8e308。我尝试将我的数组更改为 float128 类型,希望这可以解决问题,但是不,这会导致我收到错误:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: ufunc 'gamma' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''

有没有办法解决这个错误,还是 Python ufunc 无法处理超过 1.8e308 的所有浮点数?

【问题讨论】:

    标签: python floating-point numpy-ufunc


    【解决方案1】:

    ufunc 使用高度优化的 C 代码来执行所需的操作。 C 默认使用 64 位运算,因此 ufunc 无法执行比 64 位更精确的运算。

    不过,我找到了解决此问题的方法,方法是将我的 Python 代码转换为 Julia,并使用 BigFloat 类型进行任意精度算术。 Python 具有用于任意精度算术的 mpmath,但 mpmath 的函数不能在 NumPy 数组上运行,而且我的代码大量使用数组。 Julia 中的 BigFloat 类型与大多数函数兼容,并且 Julia 中的大多数函数都可以毫无问题地在数组上运行,因此我的 Julia 代码运行时没有任何重大问题。

    【讨论】:

      猜你喜欢
      • 2011-01-21
      • 2019-05-16
      • 1970-01-01
      • 2018-09-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-23
      相关资源
      最近更新 更多