我想计算一组角度的加权平均值。角度的加权平均值
在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