0

私の質問はばかげている、または非常に単純であると思われるかもしれませんが、解決策を見つけるために努力することはできませんでした. ここに私の質問があります: scipy で利用できる指数関数分布関数を書きたいです。ただし、これにscipyを使用したくありません。どうすればいいですか?

これまでの私の取り組みは次のとおりです。

import math
import numpy as np

def ExpPowerFun(x,b, size=1000):
        distribution = b*x**(b-1)*math.exp(1+x**b-math.exp(x**b))
        return distribution

この方程式は、このscipy docに基づいて使用しました。公平を期すために、この方程式を使用し、それを使用して関数を作成しても、あまり効果がありません。ご覧のとおり、値は 1 つしか返されません。scipy を使用せずに、scipy の指数べき乗分布関数に基づいて乱数の分布を生成したいと考えています。github codeclass exponpow_geから 見てきました。ただし、それは を使用するため、回避策があり、scipy の使用を回避しない限り、私にとっては役に立ちません。scipy.special(-sc)

どうすればいいのかわかりません。繰り返しますが、これは簡単な作業かもしれませんが、行き詰まっています。助けてください。

4

1 に答える 1

0

特定の分布の乱数を生成する最も簡単な方法は、その関数の CDF の逆関数を使用することです。PPF (パーセント ポイント関数) を一様分布数に適用すると、必要な分布が得られます。

あなたの場合、PPF(いくつかの変更を加えたscipyソースコードから直接取得)は次のとおりです。

np.power(np.log(1-np.log(1-x)), 1.0/b)

したがって、コードは次のようになります

def ExpPowerFun(b, size=1000):
    x = np.random.rand(size)
    return np.power(np.log(1-np.log(1-x)), 1.0/b)

import matplotlib.pyplot as plt
plt.hist(ExpPowerFun(2.7,10000),20)
plt.show()

編集:確率は0%から100%であるため、一様分布は0から1 ofcでなければなりません ここに画像の説明を入力

于 2021-12-07T00:35:54.327 に答える