flopscope.

flopscope.numpy.random.RandomState.standard_cauchy

fnp.random.RandomState.standard_cauchy(self, size=None)

Draw samples from a standard Cauchy distribution with mode = 0.

Arearandom
Typecounted
Cost
numel(output)\text{numel}(\text{output})
Flopscope Context

Legacy standard Cauchy; cost = numel(output).

Also known as the Lorentz distribution.

Note.

New code should use the standard_cauchy method of a Generator instance instead; please see the random-quick-start.

Parameters

size:int or tuple of ints, optional

Output shape. If the given shape is, e.g., (m, n, k), then m * n * k samples are drawn. Default is None, in which case a single value is returned.

Returns

samples:ndarray or scalar

The drawn samples.

See also

Notes

The probability density function for the full Cauchy distribution is

P(x;x0,γ)=1πγ[1+(xx0γ)2]P(x; x_0, \gamma) = \frac{1}{\pi \gamma \bigl[ 1+ (\frac{x-x_0}{\gamma})^2 \bigr] }

and the Standard Cauchy distribution just sets x0=0x_0=0 and γ=1\gamma=1

The Cauchy distribution arises in the solution to the driven harmonic oscillator problem, and also describes spectral line broadening. It also describes the distribution of values at which a line tilted at a random angle will cut the x axis.

When studying hypothesis tests that assume normality, seeing how the tests perform on data from a Cauchy distribution is a good indicator of their sensitivity to a heavy-tailed distribution, since the Cauchy looks very much like a Gaussian distribution, but with heavier tails.

References

footnote
1

NIST/SEMATECH e-Handbook of Statistical Methods, "Cauchy
Distribution",
https://www.itl.nist.gov/div898/handbook/eda/section3/eda3663.htm
footnote
2

Weisstein, Eric W. "Cauchy Distribution." From MathWorld--A
Wolfram Web Resource.
https://mathworld.wolfram.com/CauchyDistribution.html
footnote
3

Wikipedia, "Cauchy distribution"
https://en.wikipedia.org/wiki/Cauchy_distribution

Examples

Draw samples and plot the distribution:

>>> import matplotlib.pyplot as plt
>>> s = flops.random.standard_cauchy(1000000)
>>> s = s[(s>-25) & (s<25)]  # truncate distribution so it plots well
>>> plt.hist(s, bins=100)
>>> plt.show()