РЕДАКТИРОВАТЬ Среднее круговых величин , предполагая, что подход sin, cos является лучшим.
Рефакторинг вашего кода для использования исключительно numy.Два метода различны, однако первые два, использующие RAD2DEG или np.degrees, дают одинаковые результаты.Последний, в котором использовалась сумма степеней, деленная на размер выборки, отличается.
Кажется, что это не проблема суммирования (N = 3000, сумма в обычном порядке, по возрастанию, затем по убыванию).Они дают одинаковые результаты
np.sum(deg) # 134364.25172174018
np.sum(np.sort(deg)) # 134364.25172174018
np.sum(np.sort(deg)[::-1]) # 134364.25172174018
Я не выполнил это с суммированием cos и sin в радианах.Я оставлю это для других.
PI = np.pi
sumDeg = 0.
cosRad = 0.
sinRad = 0.
N = 30
RAD2DEG = 180.0 / PI # 57.2957795
deg = np.random.uniform(0, 90.0, N)
rad = np.deg2rad(deg)
sumDeg = np.sum(deg)
cosRad = np.sum(np.cos(rad))
sinRad = np.sum(np.sin(rad))
print(np.arctan2(sinRad/N, cosRad/N) * RAD2DEG)
print(np.degrees(np.arctan2(sinRad/N, cosRad/N)))
print(sumDeg/N)
Результаты для
> N = 1
> 22.746571717879792
> 22.746571717879792
> 22.746571717879792
>
> N= 30
> 48.99636699165551
> 48.99636699165551
> 49.000295118106884
>
> N = 300
> 44.39333460088003
> 44.39333460088003
> 44.44513528547155
>
> N = 3000
> 44.984167020219175
> 44.984167020219175
> 44.97574462726241