python - 我怎样才能在代码里面使用jit加速呢?
问题描述
我可以在没有 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)”
我希望有人可以在这个问题上指导我。
谢谢
解决方案
这会起作用
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
该错误表示未定义导入名称的操作码,您应该在 jit 装饰器之外定义导入语句。
推荐阅读
- arrays - 对数组进行排序并将计数器存储在 Ruby 中的另一个数组中
- c# - Visual Studio 社区 2019 版本 16.6.2 缺少菜单中的构建选项卡,有什么办法可以修复它?
- node.js - 为什么我收到 TypeError:无法读取未定义的属性“授权”?
- laravel - 身份验证后的 Laravel 多身份验证重定向问题
- sql - 如何查找每次状态更改之间的天数
- npm - npm 错误!代码 E500 npm 错误!500 内部服务器错误 - 获取 http://registry.npmjs.org/bootstrap
- css - 固定主导航栏不规则展开
- html - 使用 MVC Razor 页面向页面添加 html 元素
- microsoft-graph-api - 将新的 openTypeExtension 添加到事件数据的后调用失败,并显示“找不到段'扩展'的资源”
- node.js - 纱线链接:将 graphql-js 项目导入另一个 graphql-js 项目,显示另一个模块或领域错误