如何在Python中回滚随机计算状态?能否用getstate/setstate实现?
能否用random模块的getstate()和setstate()回滚sample()操作?
问题描述
假设我使用Python的random.sample()函数,对输入[1,2,3,4]进行采样后得到结果[2,3,1,4]。我的目标是回滚该操作以恢复到之前的状态,即希望通过类似unsample()的指令处理[2,3,1,4],使其回到[1,2,3,4]。请问能否通过setstate()和getstate()实现这一需求?
回答
不行,getstate()和setstate()无法实现这个需求。
这两个方法的作用是保存和恢复随机数生成器的内部状态,而非逆向推导采样操作的结果:
getstate()会记录当前随机数生成器的状态,后续调用setstate()可以让生成器回到该状态,使得后续的随机操作(比如再次调用sample())得到与之前完全一致的结果,但它没办法逆向将已生成的采样结果还原为原输入序列。random.sample()是单向的无放回采样过程,生成的结果只是原序列的一个排列,并没有保留原序列的任何额外信息。仅靠采样结果和随机状态,根本无法还原出原始数组——除非你在采样前就提前保存了原序列的副本。
如果需要回滚到采样前的状态,正确的做法是在调用sample()前先保存原序列的副本,而非依赖随机数生成器的状态来逆向操作。
内容的提问来源于stack exchange,提问作者Héctor Masip
相关产品推荐
相关产品推荐

