[Numpy-discussion] Question about numpy.random, especially .poisson

Robert Kern robert.kern at gmail.com
Mon Apr 18 22:58:06 EDT 2011

On Mon, Apr 18, 2011 at 17:08, Russell E. Owen <rowen at uw.edu> wrote:
> I stumbled across code that looks like this:
> imageArr = # a 2-d array of floats
> noiseArr = numpy.random.poisson(imageArr)
> This works fine in numpy 1.5.1 and seems to do what I would hope: return
> an array of random ints whose "expectation of interval" is set by the
> corresponding element of the input array. Very nice!
> However, I can't find any documentation supporting this usage. The
> standard help says:
>   poisson(lam=1.0, size=None)
>    Draw samples from a Poisson distribution.
>    The Poisson distribution is the limit of the Binomial
>    distribution for large N.
>    Parameters
>    ----------
>    lam : float
>        Expectation of interval, should be >= 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.
> Which suggest that Iam must be a scalar.
> So... is the usage of passing in an array for Iam actually
> supported/safe to use?

Yes, it is safe. All of the univariate distribution parameters will
broadcast against each other as they would with ufuncs. I don't think
we do it for multinomial and a couple of the other ones where the
semantics would have made my head hurt.

> And is there some general rule I could have used to predict that?

Just the one I stated, which is limited to numpy.random. It might even
be documented somewhere. Unfortunately, most of the individual methods
had their parameters documented before this capability was added.

Robert Kern

"I have come to believe that the whole world is an enigma, a harmless
enigma that is made terrible by our own mad attempt to interpret it as
though it had an underlying truth."
  -- Umberto Eco

More information about the NumPy-Discussion mailing list