我想計算一組角度的加權平均值。角度的加權平均值
在this Question,有一個答案如何計算如this page所示的平均值 。
現在我想弄清楚如何計算加權平均值。 也就是說,對於有一個權重的每個角度(權重加起來爲1)
0.25,0度 0.5,20度 0.25,90度
加權平均應(如果我不」不要犯錯誤)是32度。
我想計算一組角度的加權平均值。角度的加權平均值
在this Question,有一個答案如何計算如this page所示的平均值 。
現在我想弄清楚如何計算加權平均值。 也就是說,對於有一個權重的每個角度(權重加起來爲1)
0.25,0度 0.5,20度 0.25,90度
加權平均應(如果我不」不要犯錯誤)是32度。
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
它似乎工作正確。我必須考慮好的測試數據。
根據您的應用程序,問題有不同的答案。如上所述,您可能需要規範化您的值,並且您可能需要簽名角度,否則您可能不希望。除非您知道角度生成功能,否則可能不會有唯一的答案。
這對我來說是一個足夠的問題(在幾何工作)我寫了我自己的Angle類。
感謝您的回答!你介意在5711給我發送你的郵件地址給克里斯嗎? ORG? – Chris 2009-11-06 13:13:00
請參閱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
您必須檢查(x,y)=(0,0),在這種情況下平均方向未定義 – 2009-11-06 12:02:32
+1:這實際上是矢量和,其中矢量長度是權重。 Imho,這對於一個微弱定義的問題是最有意義的。否則,你想要的重量= .5,A = 359.99是一個約180°的角度? – tom10 2009-11-06 16:06:01