如何在 float32 而不是 float64 上强制 python 浮动操作?

Posted

技术标签:

【中文标题】如何在 float32 而不是 float64 上强制 python 浮动操作?【英文标题】:How to force python float operation on float32 rather than float64? 【发布时间】:2013-12-25 02:43:41 【问题描述】:

我想对float32 而非float64 类型进行一些数学运算(+、-、*、/)。我需要对numbernumpy.array 进行这些操作,以及一些numpy 数学函数,例如sqrt mean。我该怎么做?

【问题讨论】:

http://docs.scipy.org/doc/numpy/user/basics.types.html 【参考方案1】:

numpy.float32 会有帮助吗?

>>>PI=3.1415926535897
>>> print PI*PI
9.86960440109
>>> PI32=numpy.float32(PI)
>>> print PI32*PI32
9.86961

如果您想对 float32 进行数学运算,请将操作数转换为 float32 可能会对您有所帮助。

【讨论】:

是的。 numpy.float32 可以帮助我。有没有其他方法可以做到这一点 是的,当使用数组时,如果不是float32,可以调用它的astype方法:docs.scipy.org/doc/numpy/reference/generated/…【参考方案2】:

使用numpy.ndarray.astype:

import numpy as np

arr_f64 = np.array([1.0000123456789, 2.0000123456789, 3.0000123456789], dtype=np.float64)
arr_f32 = arr_f64.astype(np.float32)

注意精度:

np.set_printoptions(precision=16)
print("arr_f64 = ", arr_f64)
print("arr_f32 = ", arr_f32)

给予

arr_f64 =  [1.0000123456789 2.0000123456789 3.0000123456789]
arr_f32 =  [1.0000124000000 2.0000124000000 3.0000124000000]

【讨论】:

以上是关于如何在 float32 而不是 float64 上强制 python 浮动操作?的主要内容,如果未能解决你的问题,请参考以下文章

浮点型数据存储方式

从 float32 -> float64 回到 float32,我会失去精度吗?

float浮点数的二进制存储方式及转换

如何将数据类型更改为 float64 以便 sklearn 可以处理数据大于 np.float32 的数据帧

如何更改熊猫中多列的数据类型

从 numpy 数组 float32 转换为 numpy 数组 float64