Средневзвешенное значение углов

Я хочу рассчитать средневзвешенное значение набора углов.

В этом вопросе есть ответьте, как рассчитать среднее значение, как показано на этой странице.

Сейчас пытаюсь понять, как рассчитать средневзвешенное значение. То есть для каждого угла свой вес (суммы весов составляют до 1).

0,25, 0 градусов 0,5, 20 градусов 0,25, 90 градусов

Средневзвешенное значение должно (если я не ошибся) составлять 32 градуса.


person Chris    schedule 06.11.2009    source источник


Ответы (2)


Хорошо, моя попытка заключалась в том, чтобы просто умножить значения на веса:

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

КАЖЕТ работать правильно. Я должен думать о хороших тестовых данных.

person Chris    schedule 06.11.2009
comment
вы должны проверить (x, y) = (0,0), в этом случае среднее направление не определено - person fa.; 06.11.2009
comment
+1: это фактически векторная сумма, где длина вектора - это вес. Imho, это имеет смысл для слабо определенной проблемы. В противном случае, вы хотите, чтобы вес = 0,5, A = 359,99 был углом около 180? - person tom10; 06.11.2009

В зависимости от вашего приложения на вопрос могут быть разные ответы. Как упоминалось выше, вам может потребоваться нормализовать ваши значения, и вам могут потребоваться подписанные углы, или вы можете не захотеть. Если вы не знаете, что такое функция, генерирующая угол, однозначного ответа быть не может.

Для меня (работая с геометрией) это было достаточной проблемой. Я написал свой собственный класс Angle.

person peter.murray.rust    schedule 06.11.2009
comment
Спасибо за Ваш ответ! Не могли бы вы прислать мне свой почтовый адрес Крису на 5711. орг? - person Chris; 06.11.2009
comment
см. cml.svn.sourceforge.net/viewvc/cml/cmlxom/trunk/src/main/java/ - person peter.murray.rust; 06.11.2009