为什么Python numpy float32 / int division给出了float64结果?

时间:2017-11-14 21:00:00

标签: python numpy data-structures floating-point

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

V = V/num

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

任何人都可以帮助理解为什么会这样吗?

谢谢!

1 个答案:

答案 0 :(得分:1)

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

建议进一步阅读以前的类似问题:Numpy casting float32 to float64 。 Numpy对纯粹的标量操作和涉及阵列的操作有不同的处理方式。在这种情况下,除法运算涉及ndarray,因此当num小于65536但大于255时,numpy将其转换为int16。 Numpy确定int16可以无损地转换为float32而int32可以&#t; t。 np.can_cast(np.int16, np.float32)给出了True,但np.can_cast(np.int32, np.float32)给出了False

感谢您在问题下提出的富有洞察力的评论。这个答案是对这些评论的简短总结。