【问题标题】:How can I use jit acceleration in the code within?我怎样才能在代码里面使用jit加速呢?
【发布时间】:2021-01-14 11:58:55
【问题描述】:

我可以在没有 jit 加速的情况下运行这段代码:

# @jit(nopython=True)
def mnc_bellman(param, kgrid, valorInit):
    import numpy as np
    # Declaramos los argumentos del problema de programacion dinamica
    alpha, delta, sigma, gamma, beta, tfp = param

    # Inicializamos objetos que vamos a necesitar
    tam = len(kgrid)
    matrizC = np.empty((tam, tam))
    valorObj = np.zeros((tam, tam))

    for i1 in range(0, tam):
        for i2 in range(0, tam):
            matrizC[i1, i2] = tfp * kgrid[i1] ** alpha \
                              + (1.0 - delta) * kgrid[i1] \
                              - kgrid[i2]

    # Un indicador de posiciones de consumo positivas
    indC = matrizC <= 0
    matrizU = matrizC ** (1.0 - sigma) / (1.0 - sigma)
    matrizU[indC] = -1.e+6

    # A partir de aqui podemos inicializar el algoritmo ITERACION de la
    # funcion de VALOR
    # Establecemos cierta tolerancia en el criterio de convergencia
    tol = 1.0e-6

    # Esta variable va a guardar cuantas veces iteramos hasta cumplir con los
    # criterios de convergencia
    cont = 0

    # Tambien tenemos que establecer un error inicial que no se satisfaga
    # trivialmente en el primer paso del bucle
    error = 10

    while error > tol:
        for i2 in range(0, tam):
            valorObj[:, i2] = matrizU[:, i2] + beta * valorInit[i2]
        pos = valorObj.argmax(axis=1)
        valor = valorObj.max(axis=1)
        error = np.max(np.abs(valor - valorInit))
        valorInit = valor
        cont += 1
        print(error)

    # Ahora reconstruimos las reglas de decision
    reglaK = kgrid[pos]
    reglaC = tfp * kgrid ** alpha + (1.0 - delta) * kgrid - reglaK

    return valor, reglaK, reglaC

当我取消注释 @jit 时,我偶然发现了以下错误:

“UnsupportedError:发现使用了不支持的操作码 (IMPORT_NAME)”

我希望有人能在这个问题上指导我。

谢谢

【问题讨论】:

    标签: python numpy jit numba


    【解决方案1】:

    这样就可以了

    import numpy as np
    from numba import jit
    
    @jit(nopython=True)
    def mnc_bellman(param, kgrid, valorInit):
        # Declaramos los argumentos del problema de programacion dinamica
        alpha, delta, sigma, gamma, beta, tfp = param
    
        # Inicializamos objetos que vamos a necesitar
        tam = len(kgrid)
        matrizC = np.empty((tam, tam))
        valorObj = np.zeros((tam, tam))
    
        for i1 in range(0, tam):
            for i2 in range(0, tam):
                matrizC[i1, i2] = (
                    tfp * kgrid[i1] ** alpha + (1.0 - delta) * kgrid[i1] - kgrid[i2]
                )
    
        # Un indicador de posiciones de consumo positivas
        indC = matrizC <= 0
        matrizU = matrizC ** (1.0 - sigma) / (1.0 - sigma)
        matrizU[indC] = -1.0e6
    
        # A partir de aqui podemos inicializar el algoritmo ITERACION de la
        # funcion de VALOR
        # Establecemos cierta tolerancia en el criterio de convergencia
        tol = 1.0e-6
    
        # Esta variable va a guardar cuantas veces iteramos hasta cumplir con los
        # criterios de convergencia
        cont = 0
    
        # Tambien tenemos que establecer un error inicial que no se satisfaga
        # trivialmente en el primer paso del bucle
        error = 10
    
        while error > tol:
            for i2 in range(0, tam):
                valorObj[:, i2] = matrizU[:, i2] + beta * valorInit[i2]
            pos = valorObj.argmax(axis=1)
            valor = valorObj.max(axis=1)
            error = np.max(np.abs(valor - valorInit))
            valorInit = valor
            cont += 1
            print(error)
    
        # Ahora reconstruimos las reglas de decision
        reglaK = kgrid[pos]
        reglaC = tfp * kgrid ** alpha + (1.0 - delta) * kgrid - reglaK
    
        return valor, reglaK, reglaC
    

    错误提示import name的操作码没有定义,应该在jit装饰器外面定义import语句。

    【讨论】:

    • 就这么简单。谢谢
    • 如果对您有帮助,请随时点赞并接受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多