为何numpy中np.float16/32与0运算会被转换为numpy.float64?
问题原因解析
这是NumPy的类型提升规则和Python原生标量的默认转换逻辑共同作用的结果,拆解来看:
- 首先,你代码里的
0是Python原生整数,不是NumPy标量。当NumPy标量和Python原生数值运算时,NumPy会默认把Python原生值转换为NumPy的默认浮点类型——numpy.float64,这是为了尽可能避免精度损失。 - 接着,NumPy的类型提升规则是:不同精度的数值类型运算时,结果会自动转换为两者中精度更高、取值范围更大的类型。所以
float16/float32和float64运算,最终结果类型就是float64。
而当两个同类型的NumPy标量相加时,没有跨类型的转换需求,自然就保持原类型了。
你可以做个验证:如果把0换成同类型的NumPy标量,结果就会符合预期:
type(np.float16(3.0) + np.int16(0)) # 输出 numpy.float16 type(np.float32(3.0) + np.float32(0)) # 输出 numpy.float32
内容的提问来源于stack exchange,提问作者zell
相关产品推荐
相关产品推荐

