首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何使用weibull_min.pdf?

我如何使用weibull_min.pdf?
EN

Stack Overflow用户
提问于 2018-11-24 15:21:28
回答 1查看 1.8K关注 0票数 1

我发现scipyweibull_min pdf函数既不直观,也很难使用。我想用scale=30和shape=2.5生成一个威布尔PDF。这就是我们应该看到的样子:

到目前为止,我尝试过的是:

代码语言:javascript
复制
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()

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-24 18:32:57

代码中有两个问题。

  • weibull_minweibull_max不是相同的分布。您在问题的标题和描述中引用了weibull_min,但是在代码中使用了weibull_max。若要匹配所显示的情节,请使用weibull_min
  • pdf方法的参数为(x, shape, loc, scale)。您编写了pdf(speeds, 2.5, 30),它为loc参数分配了30。相反,您应该使用pdf(speeds, 2.5, scale=30)

下面是您的脚本的一个变体:

代码语言:javascript
复制
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()

它产生了这样的情节:

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53459599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档