gpt4 book ai didi

python - "Running"加权平均

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:04:23 44 4
gpt4 key购买 nike

我经常在 Python 列表中添加/删除元组,并且对加权平均值(而不是列表本身)感兴趣。由于与其余部分相比,这部分在计算上非常昂贵,因此我想对其进行优化。跟踪加权平均值的最佳方法是什么?我可以想到两种方法:

  • 保留列表并在每次访问/更改时计算加权平均值(我当前的方法)
  • 只需跟踪每个添加/删除操作的当前加权平均值和所有权重的总和以及更改权重和当前加权平均值

我更喜欢第二个选项,但我担心不断加法/减法引起的“浮点错误”。处理此问题的最佳方法是什么?

最佳答案

尝试用整数来做? Python bignums 应该对有理数进行有理论证(抱歉,来晚了……真的很抱歉)。

这实际上取决于您使用了多少项,以及您的加权系数是多少,以及您将经历多少浮点漂移。您只能获得 53 位精度,您可能不需要那么多。

如果您的权重因子小于 1,那么您的误差应该是有界的,因为您会不断降低它。假设您的体重是 0.6(太可怕了,因为您无法用二进制表示)。即 0.00110011... 表示为 0.0011001100110011001101(在最后一位四舍五入)。因此,您从该舍入中引入的任何错误都会在您再次相乘后减少。最新术语中的错误将占主导地位。

除非需要,否则不要进行最后的除法。再次给定 0.6 作为您的权重和 10 个术语,您的术语权重将为第一个术语的 99.22903012752124 一直下降到最后一个术语的 1(0.6**-t).将新项乘以 99.22...,将其添加到运行总和中并减去尾随项,然后除以 246.5725753188031 (sum([0.6**-x for x in range (0,10)])

如果您真的想对此进行调整,您可以在要删除的术语中添加 ULP,但我认为这只是故意低估。

关于python - "Running"加权平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28185311/

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