微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何快速整合正态分布和python中的某些变化?

如何解决如何快速整合正态分布和python中的某些变化?

我正在使用scipy创建正态分布pdf,并希望将其集成

def normal_distribution_function(x):
    value = scipy.stats.norm.pdf(x,mean,std)
    value=value*x
    return value
inte1,err = quad(normal_distribution_function,1)
def normal_distribution2(x):
    value=scipy.stats.norm.pdf(x,std)
    return value
inte2,err = quad(normal_distribution2,1,np.inf)

下面是对正态分布进行积分的示例,第一个功能是对与输入x相乘的积分。

我想进行快速整合,我用这种方式编写

def normal_distribution_function1(x,case):
    value = scipy.stats.norm.pdf(x,expect_reward,std1)
    if case==1:
        value=0
    elif case==2:
        value=value*(1-x)
    elif case==3:
        value=value*(1+x)-x
    elif case==4:
        value=value
    return value
case1=quad(normal_distribution_function1(case=1),np.inf)
case2=quad(normal_distribution_function1(case=2),1)
case3=quad(normal_distribution_function1(case=3),-1,0)
case4=quad(normal_distribution_function1(case=4),-np.inf,-1)

但是,我得到了错误

TypeError: normal_distribution_function1() missing 1 required positional argument: 'x'

我找不到解决方法,有人可以帮忙吗?谢谢

解决方法

您的函数normal_distribution_function1(x,case)带有两个参数,但您仅指定了第二个参数:case

在以下几行中,您还需要指定第一个参数x

case1=quad(normal_distribution_function1(case=1),1,np.inf)
case2=quad(normal_distribution_function1(case=2),1)
case3=quad(normal_distribution_function1(case=3),-1,0)
case4=quad(normal_distribution_function1(case=4),-np.inf,-1)

说明:

当您调用normal_distribution_function时,python不执行该函数,这就是为什么您没有收到任何错误的原因,因此quad()方法起作用了。如果您尝试仅传递一个参数:normal_distribution_function1(case=1),则编译器会抱怨,因为如果不提供两个参数就无法执行此功能。

explanation

,

我找到了一种使用lambda进行集成的快速方法

case2_function= lambda x : scipy.stats.norm.pdf(x,expect_reward,std1) *(1-x)
case3_function = lambda x: scipy.stats.norm.pdf(x,std1) *(1+x)-x
case2,err2=quad(case2_function,1)
case3.err3=quad(case3_function,0)

感谢Marios Karamanis的帮助!

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。