首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python错误:“numpy.ndarray”对象不可调用-如何修复?

Python错误:“numpy.ndarray”对象不可调用-如何修复?
EN

Stack Overflow用户
提问于 2022-11-01 06:04:32
回答 1查看 46关注 0票数 -1

这是我的密码。当我运行它时,我会发现python错误的一个问题:'numpy.ndarray‘对象是不可调用的。我认为问题是因为我在find_k,find_w的函数中调用了find_w,但是我不知道怎么做

代码语言:javascript
复制
import numpy as np
import copy as cp 
import scipy as sp
from scipy import optimize as optimize
from scipy.interpolate import PchipInterpolator as pchip

#primatives
#beta R <1 means that the 
beta = .8
R = 1.02
phi = .8

#define a grid
size = 100
w_grid = np.linspace(0.001,5,num = size)
代码语言:javascript
复制
#set up functions

def utility(c):
    return np.log(c)

def u_prime(c):
    return 1/c

def production(k):
    return k**(1/3)

def production_prime(k):
    return 1/3*k**(-2/3)

def production_2prime(k):
    return (-2/9)*k**(-5/3)

def inv_prod_prime(x):
    return (3*x)**(-2/3)
代码语言:javascript
复制
#define functions to get threshold value wbar and optimal policy b, k

def find_w(V_function_prime, k_star, capital_evolution):
    w_bar = (1-phi)*k_star + 1/(beta*R*V_function_prime(capital_evolution))
    return w_bar
#find_w(phi, R)

#takes in value w and current guess of v_prime and returns optimal bond choice (b)
def find_b(b, w, v_function_prime, k_star):
    foc = u_prime(w - b - k_star) - beta*R*v_function_prime(production(k_star) + R*b)
    return foc

#takes in value w and current guess of v_prime and returns optimal capital choice (k)
def find_k(k, w, v_function_prime):
    foc = (1-phi)*u_prime(w - (1-phi)*k) - beta*v_function_prime(production(k) - R*phi*k)(production_prime(k)-R*phi)
    return foc
代码语言:javascript
复制
#value function iteration function

def vfi(R, phi, beta, size, tol):
    #use known info ab optimum--add explanation here 
    k_star = inv_prod_prime(R)
    capital_evolution = production(k_star)-R*phi*k_star
    
    #inital guess of value function is utility
    VV = utility(w_grid)
    #V_prime = u_prime(w_grid)
    
    #params of loop
    err = tol + 1
    epsilon = 1e-5
    
    while err > tol:
        V_previous = cp.copy(VV) 
        V_function = pchip(w_grid, VV)
        #V_w is value function evaluated at w_grid
        V_w = V_function(w_grid)
        V_function_prime = V_function.derivative(1)
        V_prime_w = V_function_prime(w_grid)
        
        w_bar = find_w(V_function_prime, k_star, capital_evolution)
        
        k_prime = np.zeros(size)
        b_prime = np.zeros(size)
        
        for i in range(size):
            #solve unconstrained region of state-space
            if w_grid[i] >= w_bar: 
                k_choice = k_star
                #limits set based on natural bounds for borrowing given in the SP
                b_choice = optimize.brentq(find_b, (-phi*k_star), (w_grid[i] - k_star - epsilon), args = (w_grid[i], V_function_prime, k_star))
            #solve constrained region of state-space
            else:
                bound = w_grid[i]/(1-phi) - epsilon
                k_choice = optimize.brentq(find_k, (epsilon), (bound), args = (w_grid[i], V_function_prime))
                b_choice = -phi*k_choice
            #add in new guesses for optimal b, k, and update value function vector
            k_prime[i] = k_choice
            b_prime[i] = b_choice
            VV[i] = utility(w_grid[i] - b_prime[i] - k_prime[i]) + beta*V_function(production(k_prime[i]) + R*b_prime[i])
        V_function_update = pchip(w_grid, VV)
        err = np.max(np.abs(V_function_update(w_grid) - V_w))
        print(err)
        V_function = V_function_update
    return V_function, b_prime, k_prime     
                     
                
vfi(R, phi, beta, size = 100, tol = 1e-3)  

我知道bc会发生这种情况,我有一个函数V_function_prime,我正在传递给另一个函数,但我不太清楚如何解决这个问题

EN

回答 1

Stack Overflow用户

发布于 2022-11-01 06:19:31

代码语言:javascript
复制
#takes in value w and current guess of v_prime and returns optimal capital choice (k)
def find_k(k, w, v_function_prime):
    foc = (1-phi)*u_prime(w - (1-phi)*k) - beta*v_function_prime(production(k) - R*phi*k)(production_prime(k)-R*phi) ## Two times repeated function call
    return foc

检查上面的街区。v_function_prime(**args)将返回一个数组。你又用一些其他的论点来调用它。你可能需要移除其中一个。

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

https://stackoverflow.com/questions/74272097

复制
相关文章

相似问题

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