Python 努比算错了

Python 努比算错了,python,numpy,Python,Numpy,我使用的是numpy,就像这样的代码 >>>import numpy as np >>>a=np.arange(1,100000001).sum() >>>a 987459712 我想结果一定是这样的 500000050000000 我注意到,直到五个数字,结果都是好的。 有人知道发生了什么吗 问候Numpy在这里没有犯错误。这种现象被称为 在给定输入的arange中使用的32位整数类型无法容纳500000050000000。顶多也得花点时间 如果显式使用较大的整数或浮点数据类型,则会得到预期的

我使用的是numpy,就像这样的代码

>>>import numpy as np
>>>a=np.arange(1,100000001).sum()
>>>a
987459712
我想结果一定是这样的 500000050000000

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


问候

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

在给定输入的
arange
中使用的32位整数类型无法容纳500000050000000。顶多也得花点时间

如果显式使用较大的整数或浮点数据类型,则会得到预期的结果

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

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

我怀疑您使用的是Windows,其中结果的数据类型是32位整数(而对于使用Mac OS X或Linux的用户,数据类型是64位)。请注意,
500000050000000%(2**32)=987459712

试用

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


注意:任何不使用Windows的人都可以按如下方式复制结果:

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

np a=np.arange(1100000001).sum()编辑了您的问题,以包括代码的正确格式(将代码部分放在新行上,点击
ctrl
+
k
无法在python 2.7中使用numpy@1.11.2或蟒蛇3.5和numpy@1.12.0.你在用什么?另外,把问题的标题改成更精确的标题是个好主意……是的,如果你这样做的话,
a=np.arange(1100000001).sum()
它给出了
500000050000000
作为结果,冰观察到这是Windows特有的!非常感谢!解决了我的问题!听起来像是一个“错误”对我来说,尤其是在Python中,需要使用长整数。当然
numpy
有自己的算法,但作为一个数字包,它应该更擅长处理计算,而不是更糟。@alexis我不认为这是一个错误,因为它是有文档记录的行为。文档说默认情况下
arange
推断数据类型由于
100000001
足够小,因此使用
int32
似乎是合理的。实际上,由于我使用32位Python,并且主要使用整数数组进行索引,我非常欣赏默认情况下它使用指针大小的数据类型。
a = np.arange(1, 100000001).sum(dtype=np.int64)
>>> np.arange(1, 100000001).sum(dtype=np.int32)
987459712