[Numpy-discussion] random.RandomState and deepcopy

Robert Kern 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>
wrote:
> >>
> >> It is common that to guarantee good statistical independence between
> > various
> >> random generators, a singleton instance of an RNG is shared between
them.
> >>
> >> 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
> RandomState.

<shrug> If you insist:

class shared_random_state(RandomState):
    def __init__(self, rs):
        self.__setstate__(rs.__getstate__())

    def __deepcopy__(self, memo):
        return self

--
Robert Kern
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/numpy-discussion/attachments/20150313/962ba987/attachment.html>


More information about the NumPy-Discussion mailing list