You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Numba @njit装饰器时,无print语句函数结果异常求助

Numba @njit 装饰器下注释 print 语句导致计算结果异常的问题

我在用numba.njit编译器加速一个带循环的函数时遇到了诡异情况:

  • 当函数带@njit装饰器且内部保留print语句,或者完全不使用装饰器时,能得到正确结果;
  • 但注释掉装饰器函数内的print语句后,输出结果就会出错(我已经通过函数外的独立代码验证了预期结果的正确性)。

通用代码部分

import numpy as np
from numba import njit

P, A, G = 1/2.22, 0.3, 2.
T_grid = np.linspace(1e-10, 1, 101)
z_grid = np.array([0.98306027, 0.98474125, 0.98642511, 0.98811184, 0.98980146, 0.99005298])

待加速函数实现

@njit
def initial_guesses(P, A, G, T_grid, z_grid, T_idx=16):

    # 设置循环固定参数
    z_grid_size = len(z_grid)
    T = T_grid[T_idx]

    # 初始化存储计算结果的向量
    v = -1e10 * np.ones((z_grid_size))

    for z_idx in range(z_grid_size):
        l = (z_grid[z_idx] / (1. + T))**(1. / P)
        c = (z_grid[z_idx] / (1. + T))**((1. + P) / P)
        g = T * c
        if (g >= 1e-10) and (c - (l**(1. + P))/(1. + P) >= 1e-10):
            u = A * (g**(1. - G) / (1. - G)) + \
                    (1. - A) * ((c - ((l**(1. + P)) / (1. + P)))**(1. - G) / (1. - G))
#           print(np.maximum(v[z_idx], u))
            v[z_idx] = np.maximum(v[z_idx], u)
    return v

不同场景下的输出

  • 注释print语句时的错误输出:
array([-1., -1., -1., -1., -1., -1.])
  • 保留print语句时的正确预期输出:
array([-7.03544442, -6.99684645, -6.95846025, -6.92028464, -6.88231847,
       -6.87669001])

预期结果验证代码

我用以下独立代码验证了预期结果,其输出和带print的jit函数、无装饰器函数的结果完全一致:

z_grid_size = len(z_grid)
T = T_grid[16]
v_2 = -1e10 * np.ones(z_grid_size)
for z_idx in range(z_grid_size):
    l = (z_grid[z_idx] / (1. + T))**(1. / P)
    c = (z_grid[z_idx] / (1. + T))**((1. + P) / P)
    g = T * c
    if (g >= 1e-10) and (c - (l**(1. + P))/(1. + P) >= 1e-10):
        u = A * (g**(1. - G) / (1. - G)) + \
            (1. - A) * ((c - ((l**(1. + P)) / (1. + P)))**(1. - G) / (1. - G))
        v_2[z_idx] = np.maximum(v_2[z_idx], u)
print(v_2)

请问有人知道这一现象的原因吗?


内容的提问来源于stack exchange,提问作者santos_umn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.24 08:33:26