4

Pythonでランダムシードを設定する方法を知っています

random.seed([x])

シードが設定されたら、それを読み戻して、seed()関数に渡された値を把握する方法はありますか?

4

2 に答える 2

4

PythonのRandom(Mersenne Twister)の基礎となるアルゴリズムは決定論的ですが、シードは実装のメモリ空間のどこにも格納されません。必要に応じて、シードを保存するのは呼び出し元の責任です。

http://docs.python.org/library/random.html#module-random

Pythonの実装の詳細(またはランダムクラスを格納する独自のシードでオーバーライドする)については、以下を参照してください。

http://hg.python.org/cpython/file/0b650272f58f/Lib/random.py

http://hg.python.org/cpython/file/0b650272f58f/Python/random.c

于 2012-10-02T19:57:30.260 に答える
3

シード自体を取り戻す方法はありません。シードは、乱数ジェネレーターの内部状態を更新するために使用され、どこにも直接保存されません。

ただし、現在の状態を保存する方法があります。ランダムモジュールは、メルセンヌツイスター疑似乱数ジェネレーターに基づいており、Cで実装されています(_random拡張モジュールを使用)。あなたはこれを行うことができます:

import random
r = random.Random()
# Use the r object to generate numbers
# ...
curstate = r.__getstate__()
# Use it even more..
#
r.__setstate__(curstate) # Go back to previous state

つまり、random.Random()オブジェクトをピクルス化でき、ピクルス化されたオブジェクト(または__getstate__/__setstate__メソッドを直接)を使用して前の状態に戻ることができます。

于 2012-10-02T20:03:16.443 に答える