【问题标题】:scipy: How do I use weibull_min.pdf?scipy:如何使用 weibull_min.pdf?
【发布时间】:2019-04-26 19:52:43
【问题描述】:

我发现scipyweibull_min pdf 功能不直观且难以使用。我想生成比例= 30 和形状= 2.5 的weibull PDF。这应该是这样的:

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

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?

【问题讨论】:

    标签: python scipy statistics probability distribution


    【解决方案1】:

    你的代码有两个问题。

    • 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)

    这是您的脚本的一个变体:

    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()
    

    它生成这个图:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-12-31
      • 2012-10-02
      • 2019-03-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-26
      • 2016-05-05
      • 2015-04-16
      相关资源
      最近更新 更多