This question already has answers here:
numpy.sum() giving strange results on large arrays

(4个答案)


4年前关闭。




我正在使用像这样的numpy代码
>>>import numpy as np
>>>a=np.arange(1,100000001).sum()
>>>a
987459712

我想结果一定是
5000000050000000

我注意到直到五个数字都可以。
有人知道发生了什么吗?

问候

最佳答案

Numpy在这里没有犯错。这种现象称为integer overflow

x = np.arange(1,100000001)
print(x.sum())  # 987459712
print(x.dtype)  # dtype('int32')

给定输入的arange中使用的32位整数类型不能完全容纳5000000050000000。最多可以采用2147483647

如果显式使用较大的整数或浮点数据类型,则将获得预期的结果。
a = np.arange(1, 100000001, dtype='int64').sum()
print(a)  # 5000000050000000

a = np.arange(1.0, 100000001.0).sum()
print(a)  # 5000000050000000.0

关于python - numpy计算错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43209391/

10-17 00:37