例如,Weibull分布的概率分布函数PDF可能看起来有点像下图中的黑色图形。在from scipy.stats import exponweib
import matplotlib.pyplot as plt
import numpy as np
def condwbull_pdf(x, k, lmb, cond):
return (x >= cond) * exponweib.pdf(x, 1, k, scale=lmb, loc=0) / exponweib.sf(cond, 1, k, scale=lmb, loc=0)
k = 5
lmb = 100.
cond = 100
x = np.linspace(0, 200, 100)
plt.plot(x, exponweib.pdf(x, 1, k, scale=lmb, loc=0), 'k')
plt.plot(x, condwbull_pdf(x, k, lmb, cond), 'r')
plt.show()
红色的图说明了一个conditional probability distribution对于x=100的条件。请参见condwbull_pdf()。在
通常从上述威布尔分布中随机抽样,我可以:
^{pr2}$
现在,我想从条件函数中提取随机数。一种方法是:def cond_rnd(lmb, k, cond):
stop = 0
while stop < cond:
stop = random.weibullvariate(lmb, k)
return stop
但是,对于较大的条件值,这将变得非常低效。你能想得更快一点吗?在