diff --git a/src/yapsut/__init__.py b/src/yapsut/__init__.py index 2728e81fdc90c93fbf41c8be28cefe925fbf57b4..8c11f936e953bb0dbc751cd3eee780dc1512660a 100644 --- a/src/yapsut/__init__.py +++ b/src/yapsut/__init__.py @@ -13,6 +13,7 @@ from .DummyCLI import DummyCLI from .nearly_even_split import nearly_even_split from .geometry import ElipsoidTriangulation from .template_subs import discoverKeys, templateFiller +from .periodic_stats import periodic_stats #from import .grep #import .intervalls diff --git a/src/yapsut/periodic_stats.py b/src/yapsut/periodic_stats.py new file mode 100644 index 0000000000000000000000000000000000000000..9697b4b3906e58458c6eb252f701b2da411ccb63 --- /dev/null +++ b/src/yapsut/periodic_stats.py @@ -0,0 +1,29 @@ +""" periodic stats is a collection of tools for statistics over periodic quantities """ + +import numpy as np + +def periodic_stats(alpha,deg=False) : + """ statistics of a periodic alpha (radiants) + + If alpha is a vector of angles (radiants) find the average number and the std deviation avoiding the problem of the switch between -180,180 or 360 and 0 + + example: alpha=np.array([-180,180]) + + """ + u=np.cos(alpha) + v=np.sin(alpha) + # + rr=np.array([np.nanmean(u),np.nanmean(v)]) + rr=rr/rr.dot(rr)**0.5 + # + up=rr[0]*u+rr[1]*v ; + vp=-rr[1]*u+rr[0]*v + # + ap=np.rad2deg(np.arctan2(vp,up).std()) + # + return np.arctan2(rr[1],rr[0]), np.nanvar(np.arctan2(vp,up))**0.5 + +if __name__=='__main__' : + alpha_deg=np.arange(350,371) + print(np.deg2rad(alpha-360).mean(),np.deg2rad(alpha-360).std()) + print(periodic_stats(np.deg2rad(alpha)))