[Numpy-discussion] Is there anyway to seed random numbers without global state?

Robert Kern robert.kern at gmail.com
Mon Jan 12 14:50:20 EST 2009


On Mon, Jan 12, 2009 at 13:41, Tom Denniston
<tom.denniston at alum.dartmouth.org> wrote:
> I know how to seed and generate random numbers using:
> numpy.random.seed and numpy.random.rand
>
> The problem is the seeding of the random numbers is global which I
> would think would make it non-thread safe as well as having all the
> other annoyances of global state like having so set the seed and set
> it back when done.
>
> I would think the ideal would be to be able to build random number
> objects where each has a seed so that each object's seed is
> independent.  Does such a thing exist in numpy or scipy.  Does this
> even make sense to people?  Is there something about random number
> generation that makes it inherently a global thing?

from numpy.random import RandomState

prng = RandomState(myseed)
prng.standard_normal()
prng.uniform(low, high)
...


All of the "functions" in numpy.random are just aliases to the methods
on a global RandomState object provided for convenience. Whenever you
need to control the seed, you should explicitly instantiate a
RandomState object and pass it around.

-- 
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