实用功能无法正确评估numpy python

时间:2015-07-10 17:26:39

标签: python numpy economics

答案应该是117.4,我得到了9982.3 ......不确定问题是什么,但这是我的代码:

def util(c,p,alpha):
    mu = 0
    for i in range(0,len(c)):
        m = p[i]*(c[i]**(1-alpha))
        mu += m
    return mu**(1/(1-alpha))

omega = 0.495
c = np.array([100,200,1000])
p = np.array([omega, omega, 1-2*omega])
alpha = 5

编辑:我不确定我的数学或我写的函数是否有错误,我问我的数学是否适合我写的代码。

我用mu:U(mu)= E [U(c)]求解这个等式,其具有支付c和概率分布p,如上所述。 U(c)具有形式c ^(1-α)/(1-α)。

U(mu) = mu^(1-alpha)/(1-alpha) = E[U(c)] = (omega*c1^(1-alpha)+omega*c2^(1-alpha)+(1-2*omega)*c3^(1-alpha))/(1-alpha)

=> mu = (omega*c1^(1-alpha)+omega*c2^(1-alpha)+(1-2*omega)*c3^(1-alpha))^(1/(1-alpha))

1 个答案:

答案 0 :(得分:2)

你的主要问题是Python正在进行整数除法。 Python 2使用/进行整数除法,除非您执行from __future__ import division(请参阅PEP 238)。因此,您需要将至少一个操作数更改为浮点值。您可以通过设置alpha = 5.0而不是alpha = 5来执行此操作。或者您可以写1.0 - alpha而不是1 - alpha

此外,通过使用numpy的矢量化操作,您可以使代码更紧凑。您的util功能可以缩短为:

def util(c, p, alpha):
    mu = np.sum(p * (c ** (1.0 - alpha)))
    return mu ** (1 / (1.0 - alpha))