[Numpy-discussion] random enhancement
Robert Kern
robert.kern@gmail....
Wed Feb 6 14:15:18 CST 2008
Neal Becker wrote:
> One thing missing from random is a mechanism to share a single underlying
> rng with other code that is not part of numpy.random.
>
> For example, I have code that generates distributions that expect a mersenne
> twister (the shared, underlying rng) to be passed in as a constructor
> argument.
>
> numpy.random shares a single rng amongst it's own distributions, but I don't
> see any way to share with others.
Are you talking about C or Python?
In Python, just instantiate numpy.random.RandomState() and pass it around. All
of the functions in numpy.random are just aliases to the methods on a global
RandomState() instance.
C is a problem because the module is implemented in Pyrex, and RandomState is an
extension type. I've tried working on exposing the C API as a PyCObject like
numpy does, but it is incredibly tedious and, furthermore, is unlikely to
capture the higher-level methods like multivariate_normal(). I believe that
Cython has a way to automatically expose the C API of a Pyrex/Cython module, but
I haven't had the time to investigate it.
For everything but the higher level methods like multivariate_normal(), we might
be able to expose the pointer to the rk_state struct on the RandomState object
as a PyCObject and punt on exposing the API. The C user can copy the
randomkit.[ch] and distributions.[ch] files into their own code and operate on
the rk_state pointer with those functions. We may be thwarted by symbol
conflicts on some platforms, but I'm not sure.
Contributions are, of course, welcome.
--
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