グループで乱数を生成する必要があります。100、500、1000、10000の数字のユニフォームとガウス分布です。これは、いくつかのヒストグラムやその他の統計情報を作成するために必要です。
条件はPythonのネイティブランダム関数を使用しないことなので、私はこの方法(線形合同法ジェネレーター)を使用することを考えていましたXn+1 ≡ (aXn + c) mod m
。ここでは4つの変数が必要です。誰かがこのアルゴリズムを実装する方法を教えてもらえますか?初めてのm変数は100だと思います
これが線形合同法であることをすでに知っているので、それを読むのがとても難しいのは何ですか?
それはあなたがすでに知っている式とあなたがそれらをどのように選ぶべきかについての説明をあなたに伝えます:
一般的なLCGの周期は最大でmであり、いくつかの要因の選択ではそれよりはるかに短いです。オフセットcがゼロ以外の場合、LCGは、次の場合に限り、すべてのシード値に対して完全な期間を持ちます。
1)cとmは互いに素です
2)a-1はmのすべての素因数で割り切れる
3)mが4の倍数の場合、a-1は4の倍数です。
以下の表に、これらの値の例をいくつか示します。これは、単純な関数を実装するには十分すぎるほどです。
def LCG(seed, n, a=1664525, c=1013904223, m=2**32):
numbers = []
for i in xrange(n):
seed = (a * seed + c) % m
numbers.append(seed)
return numbers
print LCG(3, 5)
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加