Python Scipy 自定义任意的概率分布

这篇具有很好参考价值的文章主要介绍了Python Scipy 自定义任意的概率分布。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Scipy自带了多种常见的分布,如正态分布、均匀分布、二项分布、多项分布、伽马分布等等1,还可以自定义任意的概率分布。本文将介绍如何利用Scipy自定义任意的概率分布。

连续变量分布

考虑连续变量x满足如下概率密度分布函数:

python 自定义概率密度函数,scipy,概率分布,科学计算,python,scipy,概率论,numpy

其在实数域积分为1。我们可以通过scipy.stats中的rv_continuous类去实现这个分布,代码如下:

from scipy.stats import rv_continuous
import matplotlib.pyplot as plt
import numpy as np
class MyDistribution(rv_continuous):
    def _pdf(self, x):#概率密度分布函数
        return 2*sqrt(0.1)*exp(-0.1*x**2)*cos(x)**2/(sqrt(pi)*(exp(-10) + 1))
distribution = MyDistribution()
xlist=np.linspace(-8,8,300)
ylist=distribution.pdf(xlist)
samples=distribution.rvs(size=200);#取200次样

fig,ax=plt.subplots(figsize=(8,6))
ax.plot(xlist,ylist,lw=3,color='red',label="$\mathrm{ideal}$");
ax.hist(samples,color='blue',density=True, bins=np.arange(-8,8,0.25), histtype='barstacked', rwidth=0.9,label=r"$\mathrm{samples}$")
ax.legend(fontsize=20);
ax.set_xlabel(r"$x$",size=25)
ax.set_ylabel(r"$\mathrm{PDF}$",size=20)
ax.set_xlim(-8,8);
ax.tick_params(axis='both',direction='in',width=1.3,length=3,top=1,right=1,labelsize=20,pad=2)
fig.tight_layout();
fig.show();

运行结果如下:
python 自定义概率密度函数,scipy,概率分布,科学计算,python,scipy,概率论,numpy
增加采样次数,分布直方图逐渐趋于理想的概率分布函数P(x)。

离散变量分布

考虑连续变量x满足泊松分布,则可以用scipy.stats中的rv_discrete类去实现这个分布,代码如下:

from scipy.stats import rv_discrete
import matplotlib.pyplot as plt
import numpy as np
from scipy.special import factorial
class MyDistribution(rv_discrete):
    def _pmf(self, k, mu):
        return exp(-mu)*mu**k/factorial(k)
distribution = MyDistribution()
mu=2
samples=distribution.rvs(size=500,mu=mu);#取500次样
klist = np.arange(0,10,1)
plist = distribution.pmf(klist,mu)
fig, ax = plt.subplots()
ax.plot(klist, plist, 'ro', ms=12, mec='r',label="$\mathrm{ideal}$");
ax.hist(samples,color='blue',density=True, bins=klist, histtype='barstacked', rwidth=0.8,label=r"$\mathrm{samples}$",align="left")
ax.legend(fontsize=20);
fig.show();

运行结果如下:
python 自定义概率密度函数,scipy,概率分布,科学计算,python,scipy,概率论,numpy
可以修改上述MyDistribution类中的pmf函数,实现任意想要的离散分布。


  1. https://docs.scipy.org/doc/scipy/tutorial/ ↩︎文章来源地址https://www.toymoban.com/news/detail-586557.html

到了这里,关于Python Scipy 自定义任意的概率分布的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包