python - scipy:如何使用 weibull_min.pdf?

标签 python scipy statistics probability distribution

我发现 scipyweibull_min pdf 函数不直观且难以使用。我想生成一个规模= 30和形状= 2.5的weibull PDF。这应该是这样的:enter image description here enter image description here

这是我迄今为止尝试过的:

import matplotlib.pyplot as plt
from scipy.stats import weibull_max, uniform
import numpy as np
aoas = np.linspace(0, 8, 1000)
speeds = np.linspace(1, 80, 1000)
plt.fill_between(speeds, speeds * 0, weibull_max.pdf(speeds, 2.5, 30), facecolor='k')
plt.ylabel('Probability Density')
plt.savefig('speedDist.pdf')
plt.clf()

enter image description here

当然,我的代码是错误的。文档称 weibull_min 需要 pdf(x, c, loc=0, scale=1),其中 x 是分位数, c 是形状因子,scale 是比例因子。但是,当我将代码更改为 weibull_max.pdf(speeds, 2.5, 0, 30) 时,输出 pdf 仅由零值组成。所以,我很困惑。如何生成所需的威 bool PDF?

最佳答案

您的代码中有两个问题。

  • weibull_minweibull_max 不是同一分布。您在问题的标题和描述中引用了 weibull_min,但在代码中使用了 weibull_max。要匹配您显示的绘图,请使用 weibull_min

  • pdf 方法的参数为 (x, shape, loc, scale)。您编写了 pdf(speeds, 2.5, 30),它将 30 分配给 loc 参数。相反,您应该使用 pdf(speeds, 2.5, scale=30)

这是您的脚本的变体:

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


speeds = np.linspace(0, 80, 1000)    
p = weibull_min.pdf(speeds, 2.5, scale=30)

plt.plot(speeds, p, 'b', linewidth=1)
plt.fill_between(speeds, speeds * 0, p, facecolor='b', alpha=0.1)
plt.ylabel('Probability Density')
plt.show()

它生成这个图:

plot

关于python - scipy:如何使用 weibull_min.pdf?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53459599/

相关文章:

python - 基本 Docopt 示例不起作用

python - 逆 (CDF) 变换采样的错误分布

r - 将非平稳转换为平稳

r - 在 R Manipulate 中添加许多复选框作为列表/向量

Python-将全局变量分配给函数返回需要函数是全局的吗?

python - 建议一种在单击按钮时填充数据库的方法

python - 返回后跟空格的特定字符或单词 - Regex Python

python - 从 scipy 矩阵中删除行

python - 最小二乘拟合,混淆python scipy的赋值查询

matlab - 它使用哪种缩放技术?