Python中

时间:2015-12-20 13:50:08

标签: python random statistics probability

比较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()

PDFs

红色图表说明 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

但是,对于大条件值,这变得非常低效。你能想到更优雅/更快的东西吗?

0 个答案:

没有答案