我正在使用像这段代码那样的numpy
>>>import numpy as np
>>>a=np.arange(1,100000001).sum()
>>>a
987459712
我猜结果必须有些像 50000000.5亿
我注意到,直到五个数字结果还可以。 有人知道发生了什么事吗?
问候
答案 0 :(得分:9)
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
答案 1 :(得分:5)
我怀疑你使用的是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