首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不同值weibull pdf

不同值weibull pdf
EN

Stack Overflow用户
提问于 2016-06-30 20:26:39
回答 1查看 439关注 0票数 0

我想知道为什么预置函数dweibull.pdf的威布尔pdf的值或多或少是它们应有的一半。

我做了个测试。对于同样的x,我为A=10和K=2创建了两次weibull pdf,一个是通过自己编写公式,另一个是使用预先构建的dweibull函数。

代码语言:javascript
复制
import numpy as np
from scipy.stats import exponweib,dweibull
import matplotlib.pyplot as plt
from matplotlib.figure import Figure
K=2.0
A=10.0
x=np.arange(0.,20.,1)
#own function
def weib(data,a,k):
    return (k / a) * (data / a)**(k - 1) * np.exp(-(data / a)**k)

pdf1=weib(x,A,K) 
print sum(pdf1)

#prebuilt function            
dist=dweibull(K,1,A)
pdf2=dist.pdf(x)
print sum(pdf2)

f=plt.figure()
suba=f.add_subplot(121)
suba.plot(x,pdf1)
suba.set_title('pdf dweibull')
subb=f.add_subplot(122)
subb.plot(x,pdf2)
subb.set_title('pdf own function')
f.show()

对于威布尔来说,pdf值是一半,但这是错误的,因为求和应该是1,而不是0.5左右,就像对dweibull一样。通过给自己写公式,求和约为1。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-30 23:17:48

scipy.stats.dweibull实现了双Weibull分布。它的支持才是真正的路线。您的函数weib对应于weibull_min分布的PDF。

将函数weibweibull_min.pdf进行比较

代码语言:javascript
复制
In [128]: from scipy.stats import weibull_min

In [129]: x = np.arange(0, 20, 1.0)

In [130]: K = 2.0

In [131]: A = 10.0

你的执行情况:

代码语言:javascript
复制
In [132]: weib(x, A, K)
Out[132]: 
array([ 0.        ,  0.019801  ,  0.03843158,  0.05483587,  0.0681715 ,
        0.07788008,  0.08372116,  0.0857677 ,  0.08436679,  0.08007445,
        0.07357589,  0.0656034 ,  0.05686266,  0.04797508,  0.03944036,
        0.03161977,  0.02473752,  0.01889591,  0.014099  ,  0.0102797 ])

scipy.stats.weibull_min.pdf

代码语言:javascript
复制
In [133]: weibull_min.pdf(x, K, scale=A)
Out[133]: 
array([ 0.        ,  0.019801  ,  0.03843158,  0.05483587,  0.0681715 ,
        0.07788008,  0.08372116,  0.0857677 ,  0.08436679,  0.08007445,
        0.07357589,  0.0656034 ,  0.05686266,  0.04797508,  0.03944036,
        0.03161977,  0.02473752,  0.01889591,  0.014099  ,  0.0102797 ])

顺便说一句,在代码的这一行中有一个错误:

代码语言:javascript
复制
dist=dweibull(K,1,A)

参数的顺序是shape, location, scale,所以要将location参数设置为1,这就是为什么第二幅图中的值被移动1的原因。那条线应该是

代码语言:javascript
复制
dist = dweibull(K, 0, A)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38132647

复制
相关文章

相似问题

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