Python、NumPy、Rで同じ乱数列を作成する 質問する

Python、NumPy、Rで同じ乱数列を作成する 質問する

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 を使用できるかどうかが質問され、スタッフは、一部の課題では特定のシードを設定し、回答を提出する必要があると回答しました。

関連している:

  1. 乱数生成を使用する Matlab と Numpy コードの比較このことから、基礎となる NumPy と Matlab の実装は似ているようです。
  2. Python とオクターブの乱数ジェネレータの比較: この質問は、意図した回答にかなり近いものです。デフォルトの状態ジェネレーターを囲む何らかのラッパーが必要です。

ベストアンサー1

これは古い質問だとは思いますが、最近同じ問題に遭遇し、他の人に役立つ解決策を作成しました。

私は C で乱数ジェネレーターを作成し、それを R と Python の両方にリンクしました。この方法では、同じ C コードを使用して乱数が生成されるため、両方の言語で同じ乱数が保証されます。

このプログラムは SyncRNG と呼ばれ、次の場所にあります:https://github.com/GjjvdBurg/SyncRNG

おすすめ記事