【问题标题】:How to force NumPy to always use a precision (float32, float64 ...)?如何强制 NumPy 始终使用精度(float32,float64 ...)?
【发布时间】:2019-07-28 06:13:22
【问题描述】:

我正在尝试研究一个用 Python 编写的小 FIR 示例。见https://scipy-cookbook.readthedocs.io/items/FIRFilter.html

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

【问题讨论】:

标签: python numpy floating-point precision


【解决方案1】:

来自numpy basics:

当操作不同类型的数组时, 结果数组对应于更一般或更精确的数组(a 被称为向上转型的行为)。

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

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

【讨论】:

  • 不是正弦函数做向上转换吗? a=np.array([1,1,1])print(type(a[0]))<class 'numpy.int32'>
猜你喜欢
  • 2014-04-15
  • 1970-01-01
  • 2016-05-15
  • 1970-01-01
  • 1970-01-01
  • 2021-07-12
  • 1970-01-01
  • 2016-11-16
  • 1970-01-01
相关资源
最近更新 更多