python-3.x - 有没有办法防止 scipy.stats.gamma 为这些参数生成锯齿状的 pdf?
问题描述
我正在运行一个类似于scipy 文档页面上用于 gamma 分布的示例。我想绘制 gamma 分布的 pdf,但是当给定时a = shape = 70368744177664.0
,scale = 4.073382059442025e-05
我得到如下图所示的锯齿状图:
检查 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()
解决方案
推荐阅读
- angular - 如何在 Angular 7 中为 ng2-smart-table 添加验证?
- php - 使用模型名作为变量调用 $this->modelname->methodname()
- angular - 打字稿:没有参数的函数调用
- r - 每个数据帧行到具有 RPS 限制的 httr 正文请求
- javascript - 想要过滤json对象
- mysql - 为什么 apache2 服务器和 mysql 不在 XAMPP 中启动?
- azure - 在哪里可以找到订阅 ID、客户端 ID、机密和租户 ID 的值?
- r - 有没有办法改进“余弦”模型
- ionic-framework - 如何将离子化身放置在离子项目的左上角?
- c# - 自适应卡在 Teams c# 中返回未定义