numpy 1.21.3版本np.sum求和结果错误是什么原因,如何修复
Numpy求和结果错误问题解答
问题根因
这不是numpy版本bug,属于整型溢出导致的计算异常。
numpy创建数组未指定dtype参数时,会根据输入数值和运行环境自动匹配整型精度:
- 32位有符号整型(
int32)最大可存储数值为2147483647,你本次计算的正确求和结果4831444992远超过该上限,累加过程中发生数值回绕,最终输出错误结果536477696 - Coursera运行环境默认给数组匹配的是64位有符号整型(
int64),最大可存储9223372036854775807,完全可以容纳本次求和结果,因此输出正常
修复方案
两种方案任选其一即可:
- 创建数组时手动指定高精度整型
import numpy as np a = np.array([75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328, 75491328], dtype=np.int64) print(np.sum(a))
- 调用求和方法时指定累加精度
# 不需要修改原数组定义,求和时指定dtype即可 print(np.sum(a, dtype=np.int64))
内容的提问来源于stack exchange,提问作者Gold_Leaf
相关产品推荐
相关产品推荐

