scipy.stats.circstd#
- scipy.stats.circstd(samples, high=6.283185307179586, low=0, axis=None, nan_policy='propagate', *, normalize=False)[source]#
Compute the circular standard deviation for samples assumed to be in the range [low to high].
- Parameters
- samplesarray_like
Input array.
- highfloat or int, optional
High boundary for the sample range. Default is
2*pi
.- lowfloat or int, optional
Low boundary for the sample range. Default is 0.
- axisint, optional
Axis along which standard deviations are computed. The default is to compute the standard deviation of the flattened array.
- nan_policy{‘propagate’, ‘raise’, ‘omit’}, optional
Defines how to handle when input contains nan. ‘propagate’ returns nan, ‘raise’ throws an error, ‘omit’ performs the calculations ignoring nan values. Default is ‘propagate’.
- normalizeboolean, optional
If True, the returned value is equal to
sqrt(-2*log(R))
and does not depend on the variable units. If False (default), the returned value is scaled by((high-low)/(2*pi))
.
- Returns
- circstdfloat
Circular standard deviation.
Notes
This uses a definition of circular standard deviation from [1]. Essentially, the calculation is as follows.
C = np.cos(samples).mean() S = np.sin(samples).mean() R = np.sqrt(C**2 + S**2) l = 2*np.pi / (high-low) circstd = np.sqrt(-2*np.log(R)) / l
In the limit of small angles, it returns a number close to the ‘linear’ standard deviation.
References
- 1
Mardia, K. V. (1972). 2. In Statistics of Directional Data (pp. 18-24). Academic Press. DOI:10.1016/C2013-0-07425-7.
Examples
>>> from scipy.stats import circstd >>> small_samples = [0, 0.1*np.pi/2, 0.001*np.pi, 0.03*np.pi/2] >>> circstd(small_samples) 0.06356406330602443 >>> np.std(small_samples) 0.06355419420577858