gpt4 book ai didi

python - 条件 numpy 累计和

转载 作者:太空宇宙 更新时间:2023-11-03 11:47:43 25 4
gpt4 key购买 nike

我正在寻找一种使用 numpy 计算累积和的方法,但不想前滚该值(或将其设置为零)以防累积和非常接近为零和负数。

例如

a = np.asarray([0, 4999, -5000, 1000])
np.cumsum(a)

返回 [0, 4999, -1, 999]

但是,我想在计算过程中将 [2]-value (-1) 设置为零。问题是这个决定只能在计算期间完成,因为中间结果不是先验的。

预期的数组是:[0, 4999, 0, 1000]

这样做的原因是我得到的值非常小( float ,而不是示例中的整数),这是由于浮点计算实际上应该为零。计算累积和会导致错误的那些值。

最佳答案

Kahan summation algorithm可以解决问题。不幸的是,它是not implemented in numpy .这意味着需要自定义实现:

def kahan_cumsum(x):
x = np.asarray(x)
cumulator = np.zeros_like(x)
compensation = 0.0

cumulator[0] = x[0]
for i in range(1, len(x)):
y = x[i] - compensation
t = cumulator[i - 1] + y
compensation = (t - cumulator[i - 1]) - y
cumulator[i] = t
return cumulator

我不得不承认,这并不是问题中要求的。 (在示例中,cumsum 的第 3 个输出的值 -1 是正确的)。但是,我希望这能解决问题背后的实际问题,这与浮点精度有关。

关于python - 条件 numpy 累计和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35309237/

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