我有一个numpy.float32矩阵V,然后我用整数标量值进行了除法:
V = V/num
其中num是一个整数。结果有点令人惊讶,V被转换为numpy.float64矩阵。
任何人都可以帮助理解为什么会这样吗?
谢谢!
答案 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
。
感谢您在问题下提出的富有洞察力的评论。这个答案是对这些评论的简短总结。