2009-11-06 255 views
2

我想計算一組角度的加權平均值。角度的加權平均值

this Question,有一個答案如何計算如this page所示的平均值 。

現在我想弄清楚如何計算加權平均值。 也就是說,對於有一個權重的每個角度(權重加起來爲1)

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

加權平均應(如果我不」不要犯錯誤)是32度。

回答

4

OK,我學嘗試是剛剛與權重相乘值:

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),在這種情況下平均方向未定義 – 2009-11-06 12:02:32

+0

+1:這實際上是矢量和,其中矢量長度是權重。 Imho,這對於一個微弱定義的問題是最有意義的。否則,你想要的重量= .5,A = 359.99是一個約180°的角度? – tom10 2009-11-06 16:06:01

1

根據您的應用程序,問題有不同的答案。如上所述,您可能需要規範化您的值,並且您可能需要簽名角度,否則您可能不希望。除非您知道角度生成功能,否則可能不會有唯一的答案。

這對我來說是一個足夠的問題(在幾何工作)我寫了我自己的Angle類。

+0

感謝您的回答!你介意在5711給我發送你的郵件地址給克里斯嗎? ORG? – Chris 2009-11-06 13:13:00

+0

請參閱http://cml.svn.sourceforge.net/viewvc/cml/cmlxom/trunk/src/main/java/org/xmlcml/euclid/Angle.java?view=log – 2009-11-06 17:41:26