比较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()
红色图表说明 x = 100的条件conditional probability distribution。请参阅condwbull_pdf()
。
通常我可以从上面的Weibull分布中抽取随机数:
import random
random.weibullvariate(lmb, k)
现在,我想从条件函数中提取随机数。一种方法是:
def cond_rnd(lmb, k, cond):
stop = 0
while stop < cond:
stop = random.weibullvariate(lmb, k)
return stop
但是,对于大条件值,这变得非常低效。你能想到更优雅/更快的东西吗?