从自定义连续概率密度函数生成随机数

问题描述 投票:0回答:1

作为标题,我正在尝试从自定义的连续概率密度函数生成随机数,这是:

0.001257 *x^4 * e^(-0.285714 *x)

为此,我使用(在python 3上)scipy.stats.rv_continuous,然后使用rvs()生成它们

from decimal import Decimal
from scipy import stats

class my_distribution(stats.rv_continuous):
    def _pdf(self, x):
        return (Decimal(0.001257) *Decimal(x)**(4)*Decimal(np.exp(-0.285714 *x)))

distribution = my_distribution()
distribution.rvs()

注意,我使用Decimal摆脱了OverflowError: (34, 'Result too large')

仍然,出现错误RuntimeError: Failed to converge after 100 iterations

那里发生了什么?实现我需要做的正确方法是什么?

python random runtime-error probability-density
1个回答
0
投票

正如我所看到的,随着x越来越大,密度函数变得越来越大(实际上,指数值越来越大)。因此,以极大的概率,随机数将太大而无法容纳任何浮点数。您的密度函数在无穷大处有一个“峰值”,SciPy的rv_continuous显然有麻烦。例如,这与在0处具有单个峰的密度函数相反。 (一个示例是指数分布,其中峰位于0处,而不是无穷大。)

© www.soinside.com 2019 - 2024. All rights reserved.