首页 > 解决方案 > 有没有办法防止 scipy.stats.gamma 为这些参数生成锯齿状的 pdf?

问题描述

我正在运行一个类似于scipy 文档页面上用于 gamma 分布的示例。我想绘制 gamma 分布的 pdf,但是当给定时a = shape = 70368744177664.0scale = 4.073382059442025e-05我得到如下图所示的锯齿状图:

伽马分布的 PDF

检查 x 数组,它似乎是单调的,所以很好:

在此处输入图像描述

直接查看概率值(由下面的代码生成),我看到

array([6.49723890e-05, 8.34261989e-05, 8.34261989e-05, 8.34261989e-05,
       1.07121360e-04, 1.07121360e-04, 1.37546549e-04, 1.37546549e-04,
       1.37546549e-04, 1.76613264e-04, 1.76613264e-04, 2.26775921e-04,
       2.26775921e-04, 2.26775921e-04, 2.26775921e-04, 2.91186046e-04,
       2.91186046e-04, 3.73890284e-04, 2.91186046e-04, 3.73890284e-04,
       3.73890284e-04, 3.73890284e-04, 4.80084628e-04, 3.73890284e-04,
       4.80084628e-04, 4.80084628e-04, 6.16440864e-04, 6.16440864e-04,
       6.16440864e-04, 6.16440864e-04, 6.16440864e-04, 6.16440864e-04,
       7.91525737e-04, 7.91525737e-04, 6.16440864e-04, 7.91525737e-04,
       7.91525737e-04, 7.91525737e-04, 1.01633916e-03, 1.01633916e-03,
       7.91525737e-04, 7.91525737e-04, 1.01633916e-03, 1.01633916e-03,
       1.01633916e-03, 7.91525737e-04, 1.01633916e-03, 1.01633916e-03,
       1.01633916e-03, 1.01633916e-03, 1.01633916e-03, 7.91525737e-04,
       1.01633916e-03, 1.01633916e-03, 1.01633916e-03, 1.01633916e-03,
       7.91525737e-04, 7.91525737e-04, 7.91525737e-04, 1.01633916e-03,
       1.01633916e-03, 1.01633916e-03, 7.91525737e-04, 7.91525737e-04,
       7.91525737e-04, 7.91525737e-04, 7.91525737e-04, 6.16440864e-04,
       6.16440864e-04, 6.16440864e-04, 6.16440864e-04, 6.16440864e-04,
       6.16440864e-04, 4.80084628e-04, 4.80084628e-04, 4.80084628e-04,
       4.80084628e-04, 4.80084628e-04, 3.73890284e-04, 3.73890284e-04,
       3.73890284e-04, 3.73890284e-04, 3.73890284e-04, 2.26775921e-04,
       2.26775921e-04, 2.26775921e-04, 2.26775921e-04, 2.26775921e-04,
       2.26775921e-04, 1.76613264e-04, 1.37546549e-04, 1.37546549e-04,
       1.37546549e-04, 1.37546549e-04, 1.37546549e-04, 8.34261989e-05,
       8.34261989e-05, 8.34261989e-05, 8.34261989e-05, 6.49723890e-05])

如果仔细观察,您可以看到诸如 pdf 之类的序列2.91186046e-04, 3.73890284e-04, 2.91186046e-04,其中 pdf 将反弹振荡值,正如我们在图表中看到的那样。这告诉我这不是 matplotlib 中的错误。

您可以通过运行轻松复制它:

import numpy as np
from scipy.stats import gamma
import matplotlib.pyplot as plt

shape = 70368744177664.0
scale = 4.073382059442025e-05
x = np.linspace(gamma.ppf(0.01, shape, scale = scale), gamma.ppf(0.99, shape, scale = scale), 100)
plt.plot(x, gamma.pdf(x, shape, scale = scale))
plt.show()

标签: python-3.xscipy

解决方案


推荐阅读