重置numpy随机生成器实例

2024-09-30 14:27:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要具有重置能力的独立随机生成器实例

对于Python的内置随机生成器,我编写了以下类,这些类足以满足我的需要(如果您有更好的实现,请告诉我):

from random import Random

class PyPRNG(Random):

    def __init__(self, seed=None):
        super().__init__(seed)
        self._state = self.getstate()

    def reset(self):
        self.setstate(self._state)

>>> a = PyPRNG(2021)
>>> a.random()
0.8363375023320742
>>> a.random()
0.8583024042081875
>>> a.reset()
>>> a.random()
0.8363375023320742

现在,我想玩numpy的PRNG

我不确定如何实施重置SeedSequence对我来说不是很清楚。 最后我做到了:

from numpy.random import Generator, MT19937, PCG64, Philox, SFC64

class NumpyPRNG(Generator):

    def __init__(self, seed=None, bit_generator=MT19937):
        _bit_generator = bit_generator(seed)
        self._state = _bit_generator.state
        super().__init__(_bit_generator)

    def reset(self):
        self.bit_generator.state = self._state.copy()

>>> b = NumpyPRNG(2021, Philox)
>>> b.random()
0.2934718429185965
>>> b.random()
0.6752607814067463
>>> b.reset()
>>> b.random
0.2934718429185965

这是可行的,但也许你能给我指一个更好的解决方案


Tags: fromimportselfinitdefbitrandomgenerator