This question already has answers here:
numpy.sum() giving strange results on large arrays
(4个答案)
4年前关闭。
我正在使用像这样的numpy代码
我想结果一定是
5000000050000000
我注意到直到五个数字都可以。
有人知道发生了什么吗?
问候
给定输入的
如果显式使用较大的整数或浮点数据类型,则将获得预期的结果。
(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