角度的加权平均

8 投票
2 回答
5834 浏览
提问于 2025-04-15 15:44

我想计算一组角度的加权平均值。

这个问题中,有一个答案讲解了如何计算平均值,具体内容可以在这个页面找到。

现在我想弄明白如何计算加权平均值。也就是说,每个角度都有一个权重(这些权重加起来等于1)。

比如说:

0.25,0度
0.5,20度
0.25,90度

如果我没有搞错的话,加权平均值应该是32度。

2 个回答

1

根据你的应用场景,这个问题的答案会有所不同。正如上面提到的,你可能需要对你的数值进行标准化,也可能需要使用带符号的角度,或者你可能不想这样做。除非你知道生成角度的函数是什么,否则可能没有一个唯一的答案。

对于我来说(因为我在做几何方面的工作),这个问题让我觉得不够简单,所以我自己写了一个角度类。

8

好的,我的尝试是把这些数值和权重相乘:

def circular_mean(weights, angles):
    x = y = 0.
    for angle, weight in zip(angles, weights):
        x += math.cos(math.radians(angle)) * weight
        y += math.sin(math.radians(angle)) * weight

    mean = math.degrees(math.atan2(y, x))
    return mean

看起来这样做是对的。我需要想一些好的测试数据。

撰写回答