にゼロを生成し、指数関数的な分布。対数正規PDFは私がfolowsとして指数分布の背景に対数正規分布から乱数を生成したいのpython
この地域では、Nアイテムを配布したいと考えています。しかし、これらのアイテムは、いくつかのモード(1〜25)と標準偏差(1〜7)を持つ独自の対数正規分布を持っています。私のコードは次のように機能します。
私は私が私がpref_value
と呼ばれるモードを知っていると私は、標準偏差がpower_of_preference
と呼ばれる知っている、NはN
と呼ばれる知っている、variable_vec
と呼ばれる地域の配列を持っています。
まず、とpower_of_preference
のパラメータをshape
とscale
と計算します。私の進歩よりもfolowsのとおりです。
unique_localities = np.unique(np.array(vec_of_variable)) #all values of localities
res1 = [0 for i in range(len(unique_localities))]
res = [0 for i in range(len(vec_of_variable))] #this will be desired output
for i in range(len(res1)):
res1[i] = stats.lognorm.pdf(unique_localities[i], shape, 0, scale) #pdfs of values of localities
res1 = np.array([x/min(res1) for x in res1]) #here is the problem, min(res1) could be zero, see text
res1 = np.round(res1)
res1 = np.cumsum(res1)
item = 0
while item < N:
r = random.uniform(0, max(res1))
site_pdf_value_vec = [x for x in res1 if x >= r]
site_pdf_value = min(site_pdf_value_vec) #this is value of locality where Ill place one item
コードは続けますが、重要な部分はここにあります。簡単に言えば、地域のlognorm pdf値は、その地域に私のアイテムを配置する確率である。これが私がpdf値を必要とする理由です。
PS:このアプローチは私の上司によって承認されているため、変更したくありません。
問題は、時々起こる、そのmin(res1) = 0
です。 0より小さい分け、res1
は無限の配列になります。 0と25の間のx
の対数正規性は決してゼロではありませんが、非常に近い可能性があります。私はその問題は、これらのpdf値の1つがゼロに近すぎるので、pythonは0にすることですround
。
私の質問では、res1
のコードにゼロが表示されないようにするにはどうすればいいですか?私の考えは、Pythonで最小の正の浮動小数点数を0に置き換えることでしたが、この値はわかりません。それとももっと洗練されたソリューションがありますか?
Thxヘルプ。
PS:逆値res1
を取っていない人は、問題のステップがスーパーフローに見えることがあります。しかし、これらの値の最小値がゼロでないのはコントロールです。言い換えれば、すべての地域は、1つのpdfがゼロである場合、その確率は間隔ではなく1つの数であるという、ある程度の「間隔」「確率」を有さなければならない。
私はこの解決策を試しましたが、まだ問題が発生することがあります。でもありがとう。他のアイデアはありますか? – Bobesh
ログは-infですか?その場合、確率を実際にゼロとして扱う必要があります。アルゴリズムがゼロで割った場合、それはコードではなくアルゴリズムの問題です。 – jakevdp