Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 函数不会编译_Python_Python 3.x_Numpy_Numba - Fatal编程技术网

Python 函数不会编译

Python 函数不会编译,python,python-3.x,numpy,numba,Python,Python 3.x,Numpy,Numba,所以我在numba中有一个函数,由于某种原因没有编译(计算ROC曲线下的面积)。我也不确定如何调试该函数,因为当我在numba修饰函数中设置断点时,我的调试器不工作 以下是函数: @nb.njit() def auc_numba(fcst, obs): L = obs.size i_ord = fcst.argsort() sumV = 0. sumV2 = 0. sumW = 0. sumW2 = 0. n = 0 m = 0

所以我在numba中有一个函数,由于某种原因没有编译(计算ROC曲线下的面积)。我也不确定如何调试该函数,因为当我在numba修饰函数中设置断点时,我的调试器不工作

以下是函数:

@nb.njit()
def auc_numba(fcst, obs):
    L = obs.size

    i_ord = fcst.argsort()

    sumV = 0.
    sumV2 = 0.
    sumW = 0.
    sumW2 = 0.
    n = 0
    m = 0
    i = 0

    while True:
        nn = mm = 0
        while True:
            j = i_ord[i]
            if obs[j]:
                mm += 1
            else:
                nn += 1
            if i == L - 1:
                break
            jp1 = i_ord[i + 1]
            if fcst[j] != fcst[jp1]:
                break
            i += 1
        sumW += nn * (m + mm / 2.0)
        sumW2 += nn * (m + mm / 2.0) * (m + mm / 2.0)
        sumV += mm * (n + nn / 2.0)
        sumV2 += mm * (n + nn / 2.0) * (n + nn / 2.0)
        n += nn
        m += mm
        i += 1
        if i >= L:
            break

    theta = sumV / (m * n)
    v = sumV2 / ((m - 1) * n * n) - sumV * sumV / (m * (m - 1) * n * n)
    w = sumW2 / ((n - 1) * m * m) - sumW * sumW / (n * (n - 1) * m * m)

    sd_auc = np.sqrt(v / m + w / n)

    return np.array([theta, sd_auc])
我想的是,我实现的while循环有问题。可能是类型错误,因此中断未被激活,功能将永远运行

下面是一些要测试的示例数据:

obs = np.array([1, 0, 1, 1, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 1, 1, 1, 0, 1, 1, 1, 0, 1, 1, 0, 0, 1])
fcst = np.array([0.7083333, 0.5416667, 0.875, 0.5833333, 0.2083333, 0.8333333, 0.1666667, 0.9583333, 0.625, 0.1666667, 0.5, 1.0, 0.6666667, 0.2083333, 0.875, 0.75, 0.625, 0.3333333, 0.8333333, 0.2083333, 0.125, 0.0, 0.875, 0.8333333, 0.125, 0.5416667, 0.75])
当我在没有decorator的情况下运行这个程序时,我得到了[0.89488636 0.06561209],它们是正确的值


因此,我想如果我能得到一些帮助来理解它为什么没有编译,也许还能得到一些关于如何在numba中调试的提示?

double
while True
循环出现了一些奇怪的情况。无论出于何种原因(我不明白),如果在顶部创建两个变量
x
y
,然后:

x = 1
y = 0

while True:
    nn = mm = 0
    while x > y:
保持其他一切不变,代码就能正常工作。我将向Nuba tracker提交一个问题,因为这对我来说似乎是一个bug

更新:可以找到numba问题