微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何修改任意 scipy.stats 分布以截断它们?

如何解决如何修改任意 scipy.stats 分布以截断它们?

这个问题解决了如何从已被截断的 scipy.stats 分布(在本例中为 Maxwell-Boltzmann,易于扩展)中采样 - Getting random numbers from a truncated Maxwell-Boltzmann distribution

现在我想将任意统计分布拟合到一维数据集/直方图。为了论证,让我们将截断的 M-B 分布拟合到上面的采样直方图。否则高斯就可以了。

如何在 scipy 中创建任意分布的截断或其他修改版本,或者如何修改现有分布?

一如既往的感谢

一些示例代码 -

import numpy as np
import scipy.stats as scs
import matplotlib.pyplot as plt

dist=scs.<disTRIBUTION> # dist can be any built-in scipy.stats fn - e.g. scs.rice - but I want to truncate it / modify it arbitrarily; I kNow about trunc_norm but my problem is not restricted to Gaussians

npoints=10000
data=np.random.normal(0.8,0.05,npoints)

nbins=101
bins=np.linspace(0.0,1.0,nbins)
dbin=bins[1]-bins[0]

params=dist.fit(data)
print(params)

# Calculate best-fit curve
x=bins
p = dist.pdf(x,*params)

plt.figure()
plt.plot(x,p/dbin,'k-')

# Sample from fitted distribution
r = dist.rvs(*params,size=npoints)
_=plt.hist(r,bins=bins,color='b',alpha=0.5,density=True)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。