我需要构造一个截断的指数随机变量,其范围在5到7之间,速率参数等于0.76。我使用scipy.stats.truncexpon,loc = 5,scale = 1 / 0.76。我不知道如何指定上限。有什么想法吗?
答案 0 :(得分:3)
import scipy.stats as stats
import matplotlib.pyplot as plt
lower, upper, scale = 5, 7, 1/0.76
X = stats.truncexpon(b=(upper-lower)/scale, loc=lower, scale=scale)
data = X.rvs(10000)
fig, ax = plt.subplots()
ax.hist(data, normed=True)
plt.show()
stats.truncexpon
是instance of a subclass of rv_continuous
。
rv_continuous
类具有a
and b
parameters which define the lower and upper bound分发的支持。 truncexpon
a
参数固定为0:
truncexpon = truncexpon_gen(a=0.0, name='truncexpon')
因此,默认truncexpon
的支持从0
转到b
。
Per the docs,
truncexpon.pdf(x, b, loc, scale)
完全相同 相当于truncexpon.pdf(y, b) / scale
y = (x - loc) / scale
。
当y
从0
转到b
时,x
从loc
转到b*scale + loc
。
为了让x
从lower
转到upper
,请loc = lower
和b = (upper-lower)/scale
。