當使用隨機數生成器來實現Python代碼的可重複性時,推薦的方法似乎是構建單獨的RandomState對象。不幸的是,像scipy.stats這樣的一些基本軟件包不能(據我所知)被設置爲使用特定的RandomState,並且只會使用numpy.random的當前狀態。 我現在的解決方法是使用節省了RNG的狀態的上下文管理器,然後按如下重置它在離開:Python:使用上下文管理器臨時更改隨機種子的危險?
class FixedSeed:
def __init__(self, seed):
self.seed = seed
self.state = None
def __enter__(self):
self.state = rng.get_state()
np.random.seed(self.seed)
def __exit__(self, exc_type, exc_value, traceback):
np.random.set_state(self.state)
有很多關於以任何方式改變狀態的文件中警告 - 上述方法一般安全嗎? (在這個意義上的變化是本地的上下文和我的代碼的其餘部分將不受影響)