我试图根据三个不同的概率密度函数生成随机变量。其中两个函数是缩放正态分布,分别为
µ = 260/3, σ = 100/3, scaled by 1.53666351546
和 µ = 854/9, σ = 100/3, scaled by 1.78979465778
,第三个函数是十一个不同正态分布和两个半正态分布的总和。
我尝试对前两个分布的
numpy.random.randn
函数进行转换,但我无法让数学保持一致。我还没有为第三个发行版尝试任何东西,因为我什至不知道从哪里开始。
使用 sato 在 this Question 中创建的代码,我能够使用 Peter O. 的答案对其进行修改,以获得我的第一个发行版的以下代码:
from decimal import Decimal
from scipy import stats
import numpy
Q = Decimal(0.0460999054638)/((Decimal(2)*Decimal(numpy.pi))**Decimal(0.5))
class Distribution_B(stats.rv_continuous):
def _pdf(self, x):
return (Q*Decimal(numpy.exp(-(((Decimal(260)-Decimal(3)*Decimal(x))**Decimal(5))/Decimal(20000)))))
distribution = Distribution_B(a = 0, b = 100)
distribution.rvs()
但是,当我运行代码时,遇到了以下错误:
Warning (from warnings module):
File "[numpy function_base library]", line 2411
outputs = ufunc(*inputs)
RuntimeWarning: invalid value encountered in _cdf_single (vectorized)
编辑:我运行了代码,除了变量名称之外没有更改任何内容,而且似乎错误只是有时发生。
from decimal import Decimal
from scipy import stats
import numpy as np
Q = Decimal(0.0460999054638) / ((Decimal(2) * Decimal(np.pi)) ** Decimal(0.5))
class Distribution_B(stats.rv_continuous):
def _pdf(self, x):
x = float(x) # Convert x to float
return Q * Decimal(np.exp(-(((Decimal(260) / Decimal(3) - Decimal(x)) ** Decimal(2)) / (2 * (Decimal(100) / Decimal(3)) ** Decimal(2)))))
distribution = Distribution_B(a=0, b=100)
samples = distribution.rvs(size=1000)