python - numpy 中连续整数的总和不正确

标签 python python-3.x numpy sum

使用以下方法对前 100,000,000 个正整数求和:

import numpy as np
np.arange(1,100000001).sum()

我返回:987459712,与公式不匹配:N(N+1)/2 for N=100000000。即,公式返回 5000000050000000

在发布之前,我写了以下内容,它返回 True:

np.arange(1,65536).sum() == ((65535+1) * 65535)/2

但是,数字 65536 似乎是一个临界点,因为

np.arange(1,65537).sum() == ((65536+1) * 65536)/2

返回 False

对于大于 65536 的整数,代码返回 False,而低于此阈值的整数返回 True

谁能解释一下我在计算总和时做错了什么,或者代码出了什么问题?

最佳答案

似乎 numpy 有时很难猜测正确的数据类型。

在我的系统上,Win 10 64 位,Python 3.4.4,numpy 1.13.1:

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

但是,如果我们“帮助”numpy,它会得到正确的结果:

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

错误的结果显然是32位整数溢出造成的。

关于python - numpy 中连续整数的总和不正确,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47225263/

相关文章:

python - 将 float64 项目的 Numpy 数组作为二进制插入 PostgreSQL

python - 如果使用生成器表达式,为什么 Numpy.all() 和 any() 会给出错误的结果?

python - 创建张量的欧式距离矩阵

python - Pandas:如何创建 date32 dtype 日期时间对象?

python - 仅从 excel 中选择和导入某些列以进行导入

python - 如何在 Python Pandas Dataframe 中有条件地连接 2 列

python - 无法在 FOR 循环 Python 中解压元组对象

python - 每次我运行 "jupyter notebook"时,为什么我总是在 mac os 上得到这个?

python - 测试 Django View 函数

python - 无法在python列表中进行编码和解码