numpy.sum计算错误,数值溢出?

就很简单的一个求和计算:

import numpy as np
np.sum(range(10000000))

Out[117]: -2014260032

和直接用内置的函数计算结果不一样

sum(range(10000000))

Out[118]: 49999995000000

后来我用二分法验证了一下临界值是多少

np.sum(range(i)) == sum(range(i))

验证了几次差不多猜出来了,是2**16=65536

np.sum(range(65536)) == sum(range(65536))

Out : True

超过这个数就不行,这不是有很大的安全隐患啊,这还怎么用numpy的内置函数,而且速度感觉也不怎么样,没sum快,可能是溢出影响效率的问题吧(猜测)

但是我觉得np和python一样是支持无限大整数的,验证确实这样:

np.array(range(2**20))

可以正常运行

我感觉是不是历史遗留问题啊,求个sum都可以溢出

是不是直接用sum替换之就可以了,大家对这有什么看法?
有没有人遇到过类似的问题?
谢谢

我觉得我可以去report bug一波了23333

阅读 7.3k
1 个回答

np.sum(np.array(range(10000000), dtype=float))
numpy底层用c优化的,应对任何数学问题,默认的dtype是int32,当然溢出来啦

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题