2017-10-24 55 views
3

私は要素を取っていきたいと思っています。リストの始めに良い要素を選んでいます。低いものを好む分布でランダムに整数を生成する

現在、私の関数は次のようにランダム指数は、本質的に見える生成します

def pick(): 
    p = 0.2 
    for i in itertools.count(): 
     if random.random() < p: 
      break 
    return i 

それは良い仕事をしていませんが、私は疑問に思う:

  1. 生成されたランダム分布の名前は何ですか?
  2. その配布用のPythonには組み込み関数がありますか?
+0

ここで役立つかもしれない良い品です。 https://eli.thegreenplace.net/2010/01/22/weighted-random-generation-in-python – PeterH

+0

あなたは['geometric distribution']を作成しています(https://en.wikipedia.org/wiki/ Geometric_distribution) –

答えて

2

のレートパラメータで指数分布からのサンプリングのちょうど整数部分を取るいくつかのコードですが、これは次のようです正方形のペグを円形の穴にフィットさせる。マークが言ったように、それは幾何分布である - 1ずつシフト、離散そして、それはまさにここnumpyのである:

import numpy as np 
import random 
import itertools 
import matplotlib.pyplot as plt 

p = 0.2 

def pick(): 
    for i in itertools.count(): 
     if random.random() < p: 
      break 
    return i 

q = np.random.geometric(p, size = 100000) - 1 
z = [pick() for i in range(100000)] 

bins = np.linspace(-0.5, 30.5, 32) 

plt.hist(q, bins, alpha=0.2, label='geom') 
plt.hist(z, bins, alpha=0.2, label='pick') 
plt.legend(loc='upper right') 

plt.show() 

は出力:

enter image description here

+0

私はそれが唯一の完全に正しい答えだと思う、感謝:-) – Michael

1

random.random()はデフォルトで一様な分布になっていますが、randomには他の方法もあります。あなたのユースケースについては、random.expovariate(2)DocumentationWikipedia)を提案します。これは、より低い値を強く志向する指数分布です。ドキュメントに記載されている他の方法のいくつかをgoogleにすると、他の組み込みディストリビューションを見つけることができます。

編集:expovariateの引数の値で必ず再生してください。また、1未満の値を保証するわけではないので、1未満の値を使用する必要があります。

3

あなたの説明は、指数分布のように聞こえます。既にrandomモジュールに存在します。ここで

あなたは、指数を経由して、それをシミュレートすることができ100

import random 
import matplotlib.pyplot as plt 

d = [int(random.expovariate(1/100)) for i in range(10000)] 
h,b = np.histogram(d, bins=np.arange(0,max(d))) 

plt.bar(left=b[:-1], height=h, ec='none', width=1)) 
plt.show() 

enter image description here

+0

OPが説明するものは、指数関数ではなく幾何分布ですが、指数関数的に分布するrv確かに幾何学的分布を与える。 –

+0

@ MarkDickinson幾何分布を1だけシフトしました。 –

+0

@SeverinPappadeux:あなたの定義に依存します。たとえば、http://mathworld.wolfram.com/GeometricDistribution.htmlを参照してください。 –

関連する問題