Numpy正在计算错误

时间:2017-04-04 13:58:54

标签: python numpy

我正在使用像这段代码那样的numpy

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

我猜结果必须有些像 50000000.5亿

我注意到,直到五个数字结果还可以。 有人知道发生了什么事吗?

问候

2 个答案:

答案 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