x = [1, 2, 3, ... ]
y = sum(x)
的总和x
是2165496761,这比32位整数的限制较大所以sum(x)
返回-2129470535。
我怎么可以将其转换为长整型得到正确的值?
这是我的导入列表:
import math, csv, sys, re, time, datetime, pickle, os, gzip
from numpy import *
x = [1, 2, 3, ... ]
y = sum(x)
的总和x
是2165496761,这比32位整数的限制较大所以sum(x)
返回-2129470535。
我怎么可以将其转换为长整型得到正确的值?
这是我的导入列表:
import math, csv, sys, re, time, datetime, pickle, os, gzip
from numpy import *
为什么你这个无效值的原因是,你使用np.sum
上int32
。 没有什么能阻止你不使用np.int32
但np.int64
或np.int128
dtype
来表示你的数据。 例如,您可以只使用
x.view(np.int64).sum()
在一个侧面说明,请确保你永远不会使用from numpy import *
。 这是一个可怕的做法,你必须得到尽快摆脱尽可能的习惯。 当您使用from ... import *
,你可能会覆盖一些Python内置插件,这使得调试变得非常困难。 典型的例子,你像功能覆盖sum
或max
...
二十quatloos说你正在使用numpy
的SUM函数:
>>> sum(xrange(10**7))
49999995000000L
>>> from numpy import sum
>>> sum(xrange(10**7))
-2014260032
所以我敢打赌,你做到from numpy import *
或正在使用的一些接口,它不等同。
为了验证这一点,尝试
print type(sum(x))
在此线程的其他地方发布的例子:
>>> sum([721832253, 721832254, 721832254])
-2129470535
>>> type(sum([721832253, 721832254, 721832254]))
<type 'numpy.int32'>
编辑:有人欠我二十quatloos! 要么不使用进口星(最好),手动设置的dtype
:
>>> sum([721832253, 721832254, 721832254],dtype=object)
2165496761L
或参考内置sum
明确地(可能赋予它一个更方便的结合):
>>> __builtins__.sum([721832253, 721832254, 721832254])
2165496761L
Python的处理具有任意精度的大数:
>>> sum([721832253, 721832254, 721832254])
2165496761
只是总结起来!
为了确保您不使用numpy.sum
,尝试__builtins__.sum()
来代替。