角度加权平均值

7
我想计算一组角度的加权平均值。
在这个问题中,有一个回答说明如何计算平均值,如此问题所示,在这个页面上。
现在我正在尝试弄清楚如何计算加权平均值。也就是说,对于每个角度都有一个权重(权重总和为1)。
0.25,0度 0.5,20度 0.25,90度
如果我没有犯错,加权平均值应该为32度。
2个回答

7

好的,我的尝试是将值乘以权重:

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

看起来它工作正常。我需要考虑一些好的测试数据。


2
你需要检查 (x,y) = (0,0),在这种情况下,平均方向未定义。 - fa.
+1:这实际上是向量和,其中向量长度为权重。在我看来,对于一个定义不明确的问题,这是最有意义的。否则,你希望权重= 0.5,A = 359.99成为大约180度的角度吗? - tom10

1
根据您的应用程序,这个问题有不同的答案。如上所述,您可能需要对您的值进行规范化,并且您可能需要有带符号的角度,或者您可能不希望有。除非您知道生成角度的函数是什么,否则可能没有唯一的答案。
这对我来说已经足够成为一个问题(在几何中工作),所以我写了自己的角度类。

谢谢你的回答!你介意把你的邮件地址发送给我吗?我的邮箱是chris@5711.org - Chris
请参见此链接:http://cml.svn.sourceforge.net/viewvc/cml/cmlxom/trunk/src/main/java/org/xmlcml/euclid/Angle.java?view=log - peter.murray.rust

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接