[Numpy-discussion] random.RandomState and deepcopy
robert.kern at gmail.com
Fri Mar 13 14:05:11 EDT 2015
On Fri, Mar 13, 2015 at 5:59 PM, Neal Becker <ndbecker2 at gmail.com> wrote:
> Robert Kern wrote:
> > On Fri, Mar 13, 2015 at 5:34 PM, Neal Becker <ndbecker2 at gmail.com>
> >> It is common that to guarantee good statistical independence between
> > various
> >> random generators, a singleton instance of an RNG is shared between
> >> So I typically have various random generator objects, which (sometimes
> >> several levels objects deep) embed an instance of RandomState.
> >> Now I have a requirement to copy a generator object (without knowing
> > exactly
> >> what that generator object is).
> > Or rather, you want the generator object to *avoid* copies by returning
> > itself when a copy is requested of it.
> >> My solution is to use deepcopy on the top-level object. But I need to
> >> overload __deepcopy__ on the singleton RandomState object.
> >> Unfortunately, RandomState doesn't allow customization of __deepcopy__
> >> (or
> >> anything else). And it has no __dict__.
> > You can always subclass RandomState to override its __deepcopy__.
> > --
> > Robert Kern
> Yes, I think I prefer this:
> from numpy.random import RandomState
> class shared_random_state (RandomState):
> def __init__ (self, rs):
> RandomState.__init__(self, rs)
> def __deepcopy__ (self, memo):
> return self
> Although, that means I have to use it like this:
> rs = shared_random_state (0)
> where I really would prefer (for aesthetic reasons):
> rs = shared_random_state (RandomState(0))
> but I don't know how to do that if shared_random_state inherits from
<shrug> If you insist:
def __init__(self, rs):
def __deepcopy__(self, memo):
-------------- next part --------------
An HTML attachment was scrubbed...
More information about the NumPy-Discussion