Bei der Suche nach Reproduzierbarkeit in Python-Code unter Verwendung von Zufallszahlengeneratoren scheint es der empfohlene Ansatz zu sein, separate RandomState-Objekte zu konstruieren. Leider können einige essentielle Pakete wie scipy.stats (nach bestem Wissen und Gewissen) nicht auf einen bestimmten RandomState eingestellt werden und verwenden nur den aktuellen Zustand von numpy.random. Meine aktuelle Problemumgehung ist einen Kontext-Manager zu verwenden, die den Zustand des RNG speichert und setzt es dann beim Verlassen wie folgt:Python: Gefahren des vorübergehenden Änderns der Zufallssaat mithilfe eines Kontextmanagers?
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)
Es gibt über viele Warnungen in der Dokumentation, die den Zustand in irgendeiner Weise zu ändern - Ist der obige Ansatz generell sicher? (In dem Sinne, dass die Änderung ist lokal auf den Kontext und dass der Rest meines Codes bleibt davon unberührt)