Python 如何强制NumPy始终使用精度(float32、float64?

Python 如何强制NumPy始终使用精度(float32、float64?,python,numpy,floating-point,precision,Python,Numpy,Floating Point,Precision,我试图学习一个用Python编写的小FIR示例。看 我的目标是研究每个float16、float32和float64(在numpy中提供)的输出精度如何变化。因此,对于第一种情况,我只需要在float16中完成所有计算。问题是我每次都应该转换数据,以确保使用正确的格式。是否有一种方法可以始终如一地为整个计算使用统一的上下文,即使用float16执行所有计算(加法、减法、cos、sin…等),例如不使用强制转换重新编写代码?来自: 当使用不同类型的数组进行操作时 结果数组对应于更一般或更精确的数组

我试图学习一个用Python编写的小FIR示例。看

我的目标是研究每个
float16
float32
float64
(在numpy中提供)的输出精度如何变化。因此,对于第一种情况,我只需要在
float16
中完成所有计算。问题是我每次都应该转换数据,以确保使用正确的格式。是否有一种方法可以始终如一地为整个计算使用统一的上下文,即使用
float16
执行所有计算(加法、减法、cos、sin…等),例如不使用强制转换重新编写代码?

来自:

当使用不同类型的数组进行操作时 结果数组对应于更一般或更精确的数组(a 被称为向上投射的行为)

您可以在创建数组时定义数据类型。应用求和、乘法或减法,结果将向上转换为“较大”类型,如果对数组执行操作,它也将保留数据类型,例如:

x = np.ones(10, dtype=np.float16)
y = np.ones(10, dtype=np.float32)
print((x + y).dtype, (x - y).dtype, (x * y).dtype)
print(np.sin(x).dtype, np.sin(y).dtype)
>> float32 float32 float32
   float16 float32
传递整数时会出现异常,在这种情况下,默认情况下,numpy向上转换为float64

print(np.sin(np.ones(10, dtype=int)).dtype)
>> float64

一种一次性麻烦的方法是使用变量为所有操作分配一个数据类型,然后可以根据需要在文件顶部设置和更改该变量。请参阅。