【发布时间】:2022-01-11 14:54:09
【问题描述】:
我正在创建 random.Random() 的子类,其中生成器实际上是 NumPy 的默认 Random Generator。
这样做的原因是,我可以通过 SeedSequence 对象使用 NumPy 的生成器来利用并行执行。
重写方法random() 和seed() 相当容易,但是,我还需要重写方法getrandbits(),但我找不到任何Numpy 的等效功能/解决方案。 getrandbits() 被 random.Random() 类的所有其他函数大量使用。
【问题讨论】:
-
出于好奇,为什么需要子类化 stdlib 随机生成器?
-
您可以查看
random.getrandbits的源并将其移植到numpy -
@jakub 确实,我的想法是在我眼前有一个更简单的解决方案,我只是没有看到它。查看代码,归结为复制
int.from_bytes(_urandom(numbytes), 'big')。如果我没有得到更简单的预期答案,我会继续努力。 -
@AndrasDeak 最终目标是使用该子类来创建 faker.Faker 对象。 Faker 中的所有函数都使用底层的随机生成器,特别是函数
random()和getrandbits()。然而,random.Random() 类不能并行化,并且 BitGenerator 不能高级 (PCG64 can)。 -
@jakub 这可能是解决方案的要点,除非有更简单、更高级别的功能。
int.from_bytes(np.random.default_rng().bytes(numbytes), 'big')。谢谢!