Numpy正在计算错误

Hor*_*noy 8 python numpy

我像这样的代码使用numpy

>>>import numpy as np
>>>a=np.arange(1,100000001).sum()
>>>a
987459712
Run Code Online (Sandbox Code Playgroud)

我猜结果必须是5000000050000000

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

问候

kaz*_*ase 9

Numpy在这里没有犯错.这种现象称为整数溢出.

x = np.arange(1,100000001)
print(x.sum())  # 987459712
print(x.dtype)  # dtype('int32')
Run Code Online (Sandbox Code Playgroud)

用于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
Run Code Online (Sandbox Code Playgroud)


War*_*ser 5

我怀疑你使用的是Windows,其结果的数据类型是32位整数(而对于那些使用,例如,Mac OS X或Linux,数据类型是64位).注意5000000050000000 % (2**32) = 987459712

尝试使用

a = np.arange(1, 100000001, dtype=np.int64).sum()
Run Code Online (Sandbox Code Playgroud)

要么

a = np.arange(1, 100000001).sum(dtype=np.int64)
Run Code Online (Sandbox Code Playgroud)

PS任何不使用Windows的人都可以按如下方式重现结果:

>>> np.arange(1, 100000001).sum(dtype=np.int32)
987459712
Run Code Online (Sandbox Code Playgroud)