python - 为什么 scipy.stats.rv_continuous 选择上限次数太多?

标签 python python-2.7 scipy

我包含了我在下面编写的代码。由于某种原因,与初始分布相比,上限 0.804 被过度采样。我正在使用的两个发行版都会出现这种情况。

这是 rv_continuous 的常见问题还是我遗漏了什么?

import matplotlib.pyplot as plt
import scipy.stats as st

class Disk_pdf(st.rv_continuous):
    def _pdf(self,x):
        return (x*(1-np.exp((x-0.804)/0.2539)))/((1+x)*(x**2+0.0256**2)**0.5)

Disk_cv = Disk_pdf(a=0,b=0.804,name='Disk_pdf')
Disk_dist = Disk_cv.rvs(size = 10000)
plt.figure()
plt.hist(Disk_dist,100)




class Bulge_pdf(st.rv_continuous):
    def _pdf(self,x):
        return x*np.exp(-2.368*x-6.691*x**2)
Bulge_cv = Bulge_pdf(a=0,b=0.804,name='Bulge_pdf')

Bulge_dist = Bulge_cv.rvs(size = 10000)
plt.figure()
plt.hist(Bulge_dist,100)

下面提供了初始分布的图像和使用 rv_continuous 创建的直方图。我有两张直方图图像,一张放大显示分布是通过过采样上限以外的方法捕获的。另一张图片显示了 y 尺度上的直方图,显示了过采样问题的严重程度。

Initial Disk galaxies' distribution and histograms made using rv_continuous which have over sampled upper bound.

Initial Bulge dominated galaxies' distribution and histograms made using rv_continuous which have over sampled upper bound.

最佳答案

pdf 必须标准化,而你的似乎没有:

In [6]: from scipy.integrate import quad

In [7]: quad(Disk_cv.pdf, 0, 0.804)
Out[7]: (0.41121809643549406, 4.005573481922018e-09)

关于python - 为什么 scipy.stats.rv_continuous 选择上限次数太多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35865143/

相关文章:

python - Pandas - 用组中最频繁的值替换空值

python - PriorityQueue 很慢

python-2.7 - 从文本文件生成波形声音

python - scipy.signal welch 与 matlab pwelch 等价

python - 两个仅影响零值的稀疏矩阵的点积

python - 长的 NumPy 数组无法完全打印?

python - Django ModelForm 小部件和标签

Python interp1d 与 UnivariateSpline

python - 用于匹配 Python 列表中特定模式的正则表达式

python - 如何使用python运行带有参数的exe文件