summaryrefslogtreecommitdiff
path: root/numpy/random/mtrand.pyx
diff options
context:
space:
mode:
Diffstat (limited to 'numpy/random/mtrand.pyx')
-rw-r--r--numpy/random/mtrand.pyx40
1 files changed, 26 insertions, 14 deletions
diff --git a/numpy/random/mtrand.pyx b/numpy/random/mtrand.pyx
index 06e75a698..3e13503d0 100644
--- a/numpy/random/mtrand.pyx
+++ b/numpy/random/mtrand.pyx
@@ -1033,7 +1033,10 @@ cdef class RandomState:
greater than or equal to low. The default value is 0.
high : float or array_like of floats
Upper boundary of the output interval. All values generated will be
- less than or equal to high. The default value is 1.0.
+ less than or equal to high. The high limit may be included in the
+ returned array of floats due to floating-point rounding in the
+ equation ``low + (high-low) * random_sample()``. The default value
+ is 1.0.
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. If size is ``None`` (default),
@@ -2524,7 +2527,7 @@ cdef class RandomState:
Raises
------
ValueError
- If a < 1.
+ If a <= 0.
See Also
--------
@@ -3606,7 +3609,7 @@ cdef class RandomState:
`a` > 1.
The Zipf distribution (also known as the zeta distribution) is a
- continuous probability distribution that satisfies Zipf's law: the
+ discrete probability distribution that satisfies Zipf's law: the
frequency of an item is inversely proportional to its rank in a
frequency table.
@@ -3639,9 +3642,10 @@ cdef class RandomState:
-----
The probability density for the Zipf distribution is
- .. math:: p(x) = \\frac{x^{-a}}{\\zeta(a)},
+ .. math:: p(k) = \\frac{k^{-a}}{\\zeta(a)},
- where :math:`\\zeta` is the Riemann Zeta function.
+ for integers :math:`k \geq 1`, where :math:`\\zeta` is the Riemann Zeta
+ function.
It is named for the American linguist George Kingsley Zipf, who noted
that the frequency of any word in a sample of a language is inversely
@@ -3657,21 +3661,29 @@ cdef class RandomState:
--------
Draw samples from the distribution:
- >>> a = 2. # parameter
- >>> s = np.random.zipf(a, 1000)
+ >>> a = 4.0
+ >>> n = 20000
+ >>> s = np.random.zipf(a, n)
Display the histogram of the samples, along with
- the probability density function:
+ the expected histogram based on the probability
+ density function:
>>> import matplotlib.pyplot as plt
- >>> from scipy import special # doctest: +SKIP
+ >>> from scipy.special import zeta # doctest: +SKIP
+
+ `bincount` provides a fast histogram for small integers.
- Truncate s values at 50 so plot is interesting:
+ >>> count = np.bincount(s)
+ >>> k = np.arange(1, s.max() + 1)
- >>> count, bins, ignored = plt.hist(s[s<50], 50, density=True)
- >>> x = np.arange(1., 50.)
- >>> y = x**(-a) / special.zetac(a) # doctest: +SKIP
- >>> plt.plot(x, y/max(y), linewidth=2, color='r') # doctest: +SKIP
+ >>> plt.bar(k, count[1:], alpha=0.5, label='sample count')
+ >>> plt.plot(k, n*(k**-a)/zeta(a), 'k.-', alpha=0.5,
+ ... label='expected count') # doctest: +SKIP
+ >>> plt.semilogy()
+ >>> plt.grid(alpha=0.4)
+ >>> plt.legend()
+ >>> plt.title(f'Zipf sample, a={a}, size={n}')
>>> plt.show()
"""