PCYOPCYO

山上有座庙

Python库Numpy求和错误(溢出问题):计算结果对不上了

简单介绍

Numpy是一个著名的科学计算库(数学库)
请输入图片描述

先看代码

testList=[i for i in range(1, 100001)]
snp=np.array(testList)
def tIncrease(s):
    sum=0
    for x in s:
        sum+=x
    print(str(sum)[-150:])
def tIncreseNp(snp):
    print(str(snp.sum())[-150:])

st=time.time()
tIncrease(testList)
print(time.time()-st)
st=time.time()
tIncreseNp(snp)
print(time.time()-st)

输出结果

5000050000
0.0030014514923095703
705082704
0.0

分析

  1. 明显用传统for结果是正确的,但是numpy求和的值不对了
  2. 涉及到numpy.sum 的dtype默认参数是int32整数(存在边界值65535,超过则溢出)

优化

在numpy的数组定义时,手动指定dtype=numpy.float64即可

本原创文章未经允许不得转载 | 当前页面:PCYO » Python库Numpy求和错误(溢出问题):计算结果对不上了

评论