[SciPy-dev] Monte Carlo package

Robert Kern robert.kern at gmail.com
Tue Jan 24 13:49:15 CST 2006

Ed Schofield wrote:
> Robert Kern wrote:

>>I really would prefer that it not use rand() but use numpy.random instead. What
>>do you need to make this happen?
> Hmmm ... do you mean rk_random() defined in
> numpy/random/mtrand/randomkit.c?


> I guess I could link to this instead of
> the system default rand(), but this is probably overkill for this
> application.  I just need a single 30-bit random number per instance, to
> use as a seed.  I could use the system time directly, but at the moment
> I use rand() to scramble it up a little first:
>     /* First seed our faster XORshift RNG. */
>     /* We need to do this in a way that supports non-SVID C platforms.
>      * We use rand() twice, constructing a 30-bit integer out of the
>      * two results. */
>     srand( (unsigned int) time( NULL ));
>     seedhigh = rand();
>     seedlow = rand();
>     /* Construct a 30-bit random integer out of these. */
>     jxr = ((seedhigh & 0x3fff) << 16) + (seedlow & 0xffff);

So there's no way for the user to specify a seed? That's not acceptable for
scientific use. Preferably, I should be able to pass in a
numpy.random.RandomState object, and use the Mersenne Twister generator instead
of the XORshift algorithm. If I can do that, then I don't mind also exposing the
XORshift algorithm, too, *if* I can set the seed for that algorithm.

> I fear that depending on the randomkit.h header would just add an
> unnecessary build dependency.  Do you still see a need for it?

Yes. We can add the appropriate headers to numpy and expose the RandomState
extension object to be used in other extension modules. I should do that
anyways, so this is as good a time as any.

So what do you need from me to make this happen?

Robert Kern
robert.kern at gmail.com

"In the fields of hell where the grass grows high
 Are the graves of dreams allowed to die."
  -- Richard Harter

More information about the Scipy-dev mailing list