在数字中自动浮动32 提升



考虑以下dtype float32的NumPy数组:

In [29]: x = numpy.arange(10, dtype=numpy.float32)

当我使用 pytables.Expr 将其乘以 2 时,我得到一个float32数组:

In [30]: tables.Expr('x * 2').eval().dtype
Out[30]: dtype('float32')

然而,当我将其乘以 2.0 时,我得到一个float64数组:

In [31]: tables.Expr('x * 2.0').eval().dtype
Out[31]: dtype('float64')

有没有办法在上述表达式中指定浮点文字,而不会导致结果提升为 float64

更一般地说,我有一个使用 float32 数组的表达式,我想确保结果也是 float32 类型(我不介意float64用于中间计算,但我负担不起将结果存储为 float64 )。我该怎么做?

我很

确定pytables.Expr是基于Numexpr的。Numexpr 的文档记录了有关表达式中提升的以下信息:

在暗示标量和数组的操作中,通常规则 在 Numexpr 中使用强制转换,与 NumPy 相反,其中数组类型 优先。例如,如果"a"是 float32 类型的数组,并且 'b' 是 float64 类型的标量(或 Python float 类型,即 等效),则 'a*b' 在 Numexpr 中返回一个 float64,但在 NumPy(即数组操作数优先确定结果 类型)。如果需要将结果保留为 float32,请确保使用 浮点32标量也是。

所以这可能就是正在发生的事情。浮点常量负责提升到 64 位浮点数,解决方案是显式指定浮点常量为 float32。

相关内容

  • 没有找到相关文章

最新更新