`z`.  :math:`|z|` in the above expression
is known as the `mean resultant length`.

Parameters
----------
samples : array_like
    Input array of angle observations.  The value of a full angle is
    equal to ``(high - low)``.
high : float, optional
    Upper boundary of the principal value of an angle.  Default is ``2*pi``.
low : float, optional
    Lower boundary of the principal value of an angle.  Default is ``0``.
normalize : boolean, optional
    If ``False`` (the default), the return value is computed from the
    above formula with the input scaled by ``(2*pi)/(high-low)`` and
    the output scaled (back) by ``(high-low)/(2*pi)``.  If ``True``,
    the output is not scaled and is returned directly.

Returns
-------
circstd : float
    Circular standard deviation, optionally normalized.

    If the input array is empty, ``np.nan`` is returned.

See Also
--------
circmean : Circular mean.
circvar : Circular variance.

Notes
-----
In the limit of small angles, the circular standard deviation is close
to the 'linear' standard deviation if ``normalize`` is ``False``.

References
----------
.. [1] Mardia, K. V. (1972). 2. In *Statistics of Directional Data*
   (pp. 18-24). Academic Press. :doi:`10.1016/C2013-0-07425-7`.
.. [2] Mardia, K. V. and Jupp, P. E. *Directional Statistics*.
       John Wiley & Sons, 1999.

Examples
--------
>>> import numpy as np
>>> from scipy.stats import circstd
>>> import matplotlib.pyplot as plt
>>> samples_1 = np.array([0.072, -0.158, 0.077, 0.108, 0.286,
...                       0.133, -0.473, -0.001, -0.348, 0.131])
>>> samples_2 = np.array([0.111, -0.879, 0.078, 0.733, 0.421,
...                       0.104, -0.136, -0.867,  0.012,  0.105])
>>> circstd_1 = circstd(samples_1)
>>> circstd_2 = circstd(samples_2)

Plot the samples.

>>> fig, (left, right) = plt.subplots(ncols=2)
>>> for image in (left, right):
...     image.plot(np.cos(np.linspace(0, 2*np.pi, 500)),
...                np.sin(np.linspace(0, 2*np.pi, 500)),
...                c='k')
...     image.axis('equal')
...     image.axis('off')
>>> left.scatter(np.cos(samples_1), np.sin(samples_1), c='k', s=15)
>>> left.set_title(f"circular std: {np.round(circstd_1, 2)!r}")
>>> right.plot(np.cos(np.linspace(0, 2*np.pi, 500)),
...            np.sin(np.linspace(0, 2*np.pi, 500)),
...            c='k')
>>> right.scatter(np.cos(samples_2), np.sin(samples_2), c='k', s=15)
>>> right.set_title(f"circular std: {np.round(circstd_2, 2)!r}")
>>> plt.show()

rO