首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >scipy.stat.norm.pdf不等于一个

scipy.stat.norm.pdf不等于一个
EN

Stack Overflow用户
提问于 2018-10-09 04:11:26
回答 1查看 515关注 0票数 1

我试图计算任意点伽玛的高斯积分,如下所示:

代码语言:javascript
复制
import numpy as np
from scipy.stats import norm

def func(mu, sigma, gamma):
    x = np.linspace(mu-4*sigma, mu + 4*sigma, 100)
    y = norm.pdf(x, mu, sigma)

    area = y[x>=gamma].sum()

    print(f"Area is ~ {area:.3f}")

    plt.plot(x,y, label=f'μ0 = {mu}, σ={sigma}')
    plt.fill_between(x[x>gamma],y[x>gamma], alpha=.5, label=f'area={area:.3f}')
    plt.title("Example")
    plt.legend(loc='best')
    plt.show()

# Execute the function
func(0,10,-20)

产出为:面积~ 1.211

蓝色区域是集成的,但是它添加了多个(远不止一个),即使它不是完整的功能。

我找到了this相关的,但没有帮助。

为什么加起来不止一个?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-09 04:32:58

正如Weckesser所说,问题在于我没有考虑dx项(中间值的基本大小)。

幸运的是,这是很容易解决的,所以为了完整,在这里.

代码语言:javascript
复制
import numpy as np
from scipy.stats import norm

def func(mu, sigma, gamma):
    # Notice the retstep=True param, it will return the dx needed
    x, dx = np.linspace(mu-4*sigma, mu + 4*sigma, 100, retstep=True)
    y = norm.pdf(x, mu, sigma)

    # multiply all with dx
    area = y[x>=gamma].sum() * dx

    print(f"Area is ~ {area:.3f}")

    plt.plot(x,y, label=f'μ0 = {mu}, σ={sigma}')
    plt.fill_between(x[x>gamma],y[x>gamma], alpha=.5, label=f'area={area:.3f}')
    plt.title("Example")
    plt.legend(loc='best')
    plt.show()

func(0,10,-20)

现在输出有意义了,它是Area is ~ 0.978

图像是

“非常感谢”沃伦·韦克塞!

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

https://stackoverflow.com/questions/52713261

复制
相关文章

相似问题

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