Numpy计算错误[重复]

nbewdwxp  于 2023-10-19  发布在  其他
关注(0)|答案(2)|浏览(140)

此问题已在此处有答案

numpy.sum() giving strange results on large arrays(4个答案)
六年前就关门了。
我使用numpy就像这样的代码

>>> import numpy as np
>>> a = np.arange(1, 100000001).sum()
>>> a
987459712

我猜结果一定是5000000005000000
我注意到,直到五个数字的结果是好的。有人知道发生了什么吗?

ui7jx7zq

ui7jx7zq1#

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

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

arange中用于给定输入的32位整数类型不能容纳500000005000000。它最多可以占用2147483647
如果显式使用较大的整数或浮点数据类型,则会得到预期的结果。

a = np.arange(1, 100000001, dtype='int64').sum()
print(a)  # 5000000050000000

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

bvn4nwqk2#

我怀疑你正在使用Windows,其中结果的数据类型是32位整数(而对于那些使用Mac OS X或Linux的人来说,数据类型是64位)。注意5000000050000000 % (2**32) = 987459712
尝试使用

a = np.arange(1, 100000001, dtype=np.int64).sum()

a = np.arange(1, 100000001).sum(dtype=np.int64)

P.S.任何不使用Windows的人都可以复制结果如下:

>>> np.arange(1, 100000001).sum(dtype=np.int32)
987459712

相关问题