0

任意の (正の) 数値を返す可能性がある乱数関数を探していますが、統計的にはゼロにはほど遠い可能性があります。私は自分のニーズに合ったアルゴリズムを持っていますが、非効率的です:

def my_random():
    if random.randrange(2):
        return 1 + my_random()
    return 0

再帰なしで書き直すことができることはわかっていますが、それは非効率性を実際に否定するものではありません。より優れたパフォーマンスを持つ代替アルゴリズムを提案できる人はいますか?

私の実装言語は python ですが、重要なのはアルゴリズムです。

4

1 に答える 1

4

[0, 1)Python の など、範囲内のランダムな float を返す関数がある場合は、次の方法で指数分布からrandom.randomサンプリングできます。

def random_exponential(scale=1.):
    x = random.random()
    return -math.log(1. - x) * scale

(ちょうど読んでいた NumPy ソース コードに触発されました。NumPynp.random.exponentialを使用するオプションがある場合は、呼び出すこともできます。)

ランダムな整数が必要な場合は、これらを切り捨てることを検討してください。

于 2013-09-10T20:19:44.893 に答える