Source code for meteo_si.wind

# -*- coding: utf-8 -*-
from __future__ import absolute_import, division, print_function

import numpy as np

# from .constants import *

'''
Functions to deal with wind observations.

'''


[docs]def circular_mean(angles): """ Compute the arithmetic circular mean, not ignoring NaNs. Parameters ---------- angles : list or array The angles for averaging in radians. Returns ------- mean : float The circular mean in radians. """ if np.any(np.isnan(angles)): return np.nan else: return nan_circular_mean(angles)
[docs]def nan_circular_mean(angles): """ Compute the arithmetic circular mean, ignoring NaNs. Parameters ---------- angles : list or array The angles for averaging in radians. Returns ------- mean : float The circular mean in radians. """ x = np.nansum(np.cos(angles)) y = np.nansum(np.sin(angles)) mean = np.arctan2(y, x) if mean < 0: mean = mean + (np.pi*2) return mean
[docs]def circular_mean_deg(angles): """ Compute the arithmetic circular mean, not ignoring NaNs. Parameters ---------- angles : list or array The angles for averaging in degrees. Returns ------- mean : float The circular mean in degrees. """ if np.any(np.isnan(angles)): return np.nan else: return nan_circular_mean_deg(angles)
[docs]def nan_circular_mean_deg(angles): """ Compute the arithmetic circular mean, ignoring NaNs. Parameters ---------- angles : list or array The angles for averaging in degrees. Returns ------- mean : float The circular mean in degrees. """ return np.rad2deg(nan_circular_mean(np.deg2rad(angles)))