一連の角度の加重平均を計算したい。
この質問には、このページに示されているように平均を計算する方法の答えがあります。
現在、加重平均を計算する方法を理解しようとしています。つまり、角度ごとに重みがあります (重みの合計は 1 になります)。
0.25、0 度 0.5、20 度 0.25、90 度
加重平均は (間違いがなければ) 32 度である必要があります。
OK, my attemp was to just multiply the values with the weights:
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
It SEEMS to work correct. I have to think of good test data.
アプリケーションに応じて、質問の答えは異なります。上で述べたように、値を正規化する必要があり、署名された角度が必要な場合や、そうしたくない場合があります。角度生成関数が何であるかを知らない限り、一意の答えはないかもしれません。
これは私にとっては十分な問題でした (幾何学の仕事をしています) 私は独自の Angle クラスを書きました。