为什么Python numpy float32 / int除法会给出float64结果?

Why does Python numpy float32 / int division gives a float64 result?

我有一个numpy.float32矩阵V,然后用整数标量值进行了除法:

1
V = V/num

其中num是整数。 将V转换为numpy.float64矩阵,结果有些令人惊讶。

谁能帮助理解为什么会这样吗?

谢谢!


根据Numpy.result_type,numpy.float32不能无损地保存int32。 当对int32进行操作时,numpy会将结果值提升为float64。 同样根据@Eric,实际的int类型可能会在不同的环境中发生变化,因此进行预测试是避免某些潜在意外的好习惯。

建议使用类似的先前问题进行进一步阅读:将Numpy转换为float32到float64
。 Numpy对于纯标量运算和涉及数组的运算有不同的处理方式。 在这种情况下,除法运算涉及一个ndarray,因此,当num小于65536但大于255时,numpy将其转换为int16。 Numpy确定int16可以无损地转换为float32,而int32则可以无损。 np.can_cast(np.int16, np.float32)给出True,而np.can_cast(np.int32, np.float32)给出False

感谢您对问题的深刻见解。 该答案是这些评论的简短摘要。