[Numpy-discussion] random.RandomState and deepcopy
Neal Becker
ndbecker2 at gmail.com
Fri Mar 13 13:59:56 EDT 2015
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.
--
Those who fail to understand recursion are doomed to repeat it
More information about the NumPy-Discussion
mailing list