特定积分的期望值的计算(通过norm.pdf和integral.quad)不适用于输入参数

问题描述 投票:-1回答:1

我的问题:integration.quad无法与我的输入参数(dataFrames)一起使用。

我的目标:计算已定义函数的期望值以及每个产品的特定mu,sigma,积分下限和上限

所需的输出:2x2 dataFrame

          1                      2
Product1  0.000000e+00           0.000000e+00
Product2  2.929601072372639e-40  1.6332471427821411e-52

我的方法:

  • 要集成的功能的定义:y * pdf(y)
  • 下界= 0且上限= ubIntegration的函数的积分

这里是完整代码:

import pandas as pd
import scipy.stats
import scipy.integrate as integrate

# Input parameters as dataframes
mu = pd.DataFrame({'1': [7, 12],
                   '2': [7.50, 16.97]},
                  index=["Product1", "Product2"])
sigma = pd.DataFrame({'1': [0.07, 0.6],
                      '2': [0.075, 0.848]},
                     index=["Product1", "Product2"])
input = pd.DataFrame({'1': [1, 2]},
                     index=["Product1", "Product2"])
ubIntegration = pd.DataFrame({'1': [2, 4]},
                             index=["Product1", "Product2"])

# Definition of function: y*pdf(y)
def function(y, mu, sigma):
    return y * scipy.stats.norm.pdf(y, mu, sigma)

# Calculation of expected value through integration of "function"
for i in mu.index.values:
    for k in mu.columns.values:
        lb = 0
        ub = ubIntegration.loc[i]
        EV, err = integrate.quad(function, lb, ub, args=(mu.loc[i,k], sigma.loc[i,k]))
python normal-distribution valueerror numerical-integration probability-density
1个回答
1
投票

您的ub包含two值,这显然是非法的。只需将它们循环:

# Calculation of expected value through integration of "function"
for i in mu.index.values:
    for k in mu.columns.values:
        lb = 0
        for ub in ubIntegration.loc[i]:
            EV, err = integrate.quad(function, lb, ub, args=(mu.loc[i,k], sigma.loc[i,k]))
            print(EV, err)
0.0 0.0
0.0 0.0
2.929601072372639e-40 1.424432202967594e-41
1.6332471427821411e-52 5.351027607956578e-55
© www.soinside.com 2019 - 2024. All rights reserved.