Python、NumPy、R はすべて、乱数列を生成するために同じアルゴリズム (メルセンヌ ツイスター) を使用します。したがって、理論的には、同じシードを設定すると、3 つすべてで同じ乱数列が生成されるはずです。しかし、そうではありません。3 つの実装で異なるパラメーターが使用され、この動作が発生していると考えられます。
R >set.seed(1) >runif(5) [1] 0.2655087 0.3721239 0.5728534 0.9082078 0.2016819
パイソン [3]では: random.seed(1) [4]において: [random.random() が範囲内(5)] アウト[4]: [0.13436424411240122, 0.8474337369372327、 0.763774618976614、 0.2550690257394217、 0.49543508709194095]
ナンピ [23]: numpyをnpとしてインポートする [24]では: np.random.seed(1) [25]では: np.random.rand(5) アウト[25]: 配列([ 4.17022005e-01, 7.20324493e-01, 1.14374817e-04, 3.02332573e-01, 1.46755891e-01])
NumPy と Python の実装で同じ乱数シーケンスを生成する方法はありますか? もちろん、いくつかのコメントや回答で指摘されているように、rpy を使用することもできます。私が特に探しているのは、シーケンスを取得するために Python と NumPy のそれぞれの呼び出しでパラメーターを微調整することです。
背景: この懸念は、R が使用される EDX コースの提供から生じています。フォーラムの 1 つで、Python を使用できるかどうかが質問され、スタッフは、一部の課題では特定のシードを設定し、回答を提出する必要があると回答しました。
関連している:
- 乱数生成を使用する Matlab と Numpy コードの比較このことから、基礎となる NumPy と Matlab の実装は似ているようです。
- Python とオクターブの乱数ジェネレータの比較: この質問は、意図した回答にかなり近いものです。デフォルトの状態ジェネレーターを囲む何らかのラッパーが必要です。
ベストアンサー1
これは古い質問だとは思いますが、最近同じ問題に遭遇し、他の人に役立つ解決策を作成しました。
私は C で乱数ジェネレーターを作成し、それを R と Python の両方にリンクしました。この方法では、同じ C コードを使用して乱数が生成されるため、両方の言語で同じ乱数が保証されます。
このプログラムは SyncRNG と呼ばれ、次の場所にあります:https://github.com/GjjvdBurg/SyncRNG。