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