Skip to main content
`Ctrl`+`K`

# numpy.random.exponential

random.exponential(scale=1.0, size=None)

  Draw samples from an exponential distribution.

  Its probability density function is

  \[f(x; \frac{1}{\beta}) = \frac{1}{\beta} \exp(-\frac{x}{\beta}),\]

  for `x > 0` and 0 elsewhere. \(\beta\) is the scale parameter, which is the inverse of the rate parameter \(\lambda = 1/\beta\). The rate parameter is an alternative, widely used parameterization of the exponential distribution [3].

  The exponential distribution is a continuous analogue of the geometric distribution. It describes many common situations, such as the size of raindrops measured over many rainstorms [1], or the time between page requests to Wikipedia [2].

  Note

  New code should use the `exponential` method of a `Generator` instance instead; please see the Quick start.

  Parameters:
    scale float or array_like of floats

      The scale parameter, \(\beta = 1/\lambda\). Must be non-negative.

    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), a single value is returned if `scale` is a scalar. Otherwise, `np.array(scale).size` samples are drawn.

  Returns:
    out ndarray or scalar

      Drawn samples from the parameterized exponential distribution.

  See also

  `random.Generator.exponential`

    which should be used for new code.

  References

  [1]

  Peyton Z. Peebles Jr., “Probability, Random Variables and Random Signal Principles”, 4th ed, 2001, p. 57.

  [2]

  Wikipedia, “Poisson process”, https://en.wikipedia.org/wiki/Poisson_process

  [3]

  Wikipedia, “Exponential distribution”, https://en.wikipedia.org/wiki/Exponential_distribution

  Examples

  A real world example: Assume a company has 10000 customer support agents and the average time between customer calls is 4 minutes.

      >>> n = 10000
      >>> time_between_calls = np.random.default_rng().exponential(scale=4, size=n)

  What is the probability that a customer will call in the next 4 to 5 minutes?

      >>> x = ((time_between_calls < 5).sum())/n
      >>> y = ((time_between_calls < 4).sum())/n
      >>> x-y
      0.08 # may vary