我正在尝试研究一些用Python编写的FIR示例。参见https://scipy-cookbook.readthedocs.io/items/FIRFilter.html
我的目标是研究每个float16
,float32
和float64
(以numpy格式)的输出精度如何变化。因此,对于第一种情况,我只需要在float16
中完成所有计算即可。问题是我应该每次强制转换数据以确保使用正确的格式。是否有一种方法可以在整个计算过程中始终使用统一的上下文,例如使用float16
执行所有计算(加法,减法,cos,sin等),而无需使用强制类型转换代码? >
答案 0 :(得分:1)
当使用不同类型的数组进行操作时, 结果数组对应于更通用或更精确的数组(a 这种行为称为“向上投射”。
您可以在创建数组时定义数据类型。应用求和,乘法或减法,结果将转换为“更大”类型,如果您对数组执行操作,例如,
,它也会保留dtype。efg
一个例外是传递整数时,在这种情况下,默认情况下,将numpy上传到float64
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