gpt4 book ai didi

python - python numpy中的长(> 2000万个元素)数组求和

转载 作者:太空狗 更新时间:2023-10-29 21:09:03 26 4
gpt4 key购买 nike

我是 python 和 numpy 的新手,所以如果这个问题很简单,请原谅!我有一个负值数组(已排序):

>>>neg
[ -1.53507843e+02 -1.53200012e+02 -1.43161987e+02 ..., -6.37326136e-1 -3.97518490e-10 -3.73480691e-10]
>>>neg.shape
(12922508,)

我需要将此数组添加到它的副本(但具有正值)以找到平均为零的分布的标准偏差。所以我做了以下事情:

>>>pos=-1*neg
>>>pos=pos[::-1] #Just to make it look symmetric for the display bellow!
>>>total=np.hstack((neg,pos))
>>>total
[-153.50784302 -153.20001221 -143.1619873 ..., 143.1619873 153.20001221 153.50784302]
>>>total.shape
(25845016,)

到目前为止一切都很好,但奇怪的是这个新数组的总和不为零:

>>>numpy.sum(total)
11610.6

标准偏差也根本不接近我的预期,但我猜这个问题的根源与此相同:为什么总和不为零?

当我将此方法应用于小型数组时;例如 [-5, -3, -2] 总和变为零。所以我猜问题出在数组的长度上(超过 2000 万个元素)。有什么办法可以解决这个问题吗?

如果有人能在这方面帮助我,我将不胜感激。

最佳答案

如评论中所述,将数百万个等号数字相加会遇到 float 舍入问题。解决此问题的一种可能方法是在组合数组中混合正数和负数,以便在求和时的任何中间结果始终大致保持在相同的数量级内:

neg = -100*numpy.random.rand(20e6)
pos = -neg
combined = numpy.zeros(len(neg)+len(pos))
combined[::2] = neg
combined[1::2] = pos

现在 combined.sum() 应该非常接近于零。

也许这种方法也有助于提高标准差计算的精度。

关于python - python numpy中的长(> 2000万个元素)数组求和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8599333/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com