我有一个numpy.float32矩阵V,然后我用一个整数标量值进行了除法操作: V = V/num 其中num是一个整数。结果有些令人惊讶,V被转换为numpy.float64矩阵。 有没有人能帮助理解为什么会这样呢? 谢谢!
根据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则不能。这可以通过np.can_cast(np.int16, np.float32)返回True,而np.can_cast(np.int32, np.float32)返回False来展示。感谢您在问题下面提供的有见地的评论。这个回答是对这些评论的简短总结。
int
,例如np.can_cast(2**15, np.float32)
对我来说返回True
,但是np.can_cast(2**16, np.float32)
返回False
。 - juanpa.arrivillaga