Python中np.power(int型数组,3)结果异常与浮点型结果不同的原因是什么?
NumPy不同dtype幂运算结果差异原因
核心原因:固定精度整数溢出
- 当你指定数组
dtype=int时,NumPy会根据系统分配固定长度的整数类型,多数64位系统下对应np.int64,其可表示的数值范围为[-2^63, 2^63 - 1],最大值约为9.22e18。 - 你的数组执行
a = a * 1000后,最小元素为6.7e6,三次方计算结果约为3e20,已经远大于np.int64的最大可表示值。NumPy的整数运算默认不会自动提升数据类型,溢出后会按照模2^位数的规则截断数值,甚至会因为符号位被覆盖出现负数,这就是你得到错误计算结果的原因,**运算符和np.power函数的整数运算逻辑一致,所以返回结果相同。
浮点类型计算正常的原因
当你指定数组dtype=float时,默认对应np.float64类型,它的正数值可表示范围约为2.2e-308 ~ 1.8e308,完全可以覆盖你运算得到的1e20 ~ 1e23量级的结果,不会出现溢出问题,所以计算结果正确。
小提示:如果需要保留整数属性且避免溢出,可以将数组设置为
dtype=object使用Python原生的任意精度整数,缺点是会牺牲NumPy的向量化运算性能。
内容的提问来源于stack exchange,提问作者Fernando Aguado
相关产品推荐
相关产品推荐

