我想从概率分布中抽取样本CDF https://en.wikipedia.org/wiki/Cumulative_distribution_function 1 - e^(-x^2)
.
python/scipy/等中有没有方法?使您能够从仅给定 CDF 的概率分布中进行采样?
要创建给定 CDF 的自定义随机变量类,您可以子类化scipy.rv_continuous
并覆盖rv_continuous._cdf
。然后,这将自动生成相应的 PDF 和有关您的发行版的其他统计信息,例如
import matplotlib.pyplot as plt
import numpy as np
from scipy import stats
class MyRandomVariableClass(stats.rv_continuous):
def __init__(self, xtol=1e-14, seed=None):
super().__init__(a=0, xtol=xtol, seed=seed)
def _cdf(self, x):
return 1-np.exp(-x**2)
if __name__ == "__main__":
my_rv = MyRandomVariableClass()
# sample distribution
samples = my_rv.rvs(size = 1000)
# plot histogram of samples
fig, ax1 = plt.subplots()
ax1.hist(list(samples), bins=50)
# plot PDF and CDF of distribution
pts = np.linspace(0, 5)
ax2 = ax1.twinx()
ax2.set_ylim(0,1.1)
ax2.plot(pts, my_rv.pdf(pts), color='red')
ax2.plot(pts, my_rv.cdf(pts), color='orange')
fig.tight_layout()
plt.show()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)