首页 > 解决方案 > numpy.zeros() 是否允许正确的 numba 缓存?

问题描述

在函数中调用Numba 时不会缓存numpy.zeros()。但是,缓存与numpy.zeros_like().

在函数中调用时,我不能让 numba 缓存numpy.zeros()函数。当numpy.zeros()被替换时,相同的函数被成功缓存numpy.zeros_like(),并正确更改参数。

@jit('UniTuple(float64[:],4)(int32[:],int32[:],int32[:],int32[:],float64[:])',
     nopython=True, parallel=True, cache=True, fastmath=True, nogil=True)
def fun_rec(a: np.ndarray, b: np.ndarray, m: np.ndarray, n: np.ndarray, x: np.ndarray):
    l = int(len(x))
    rec_num = np.zeros_like(x)
    # not caching with rec_num = np.zeros(l)
    rec_avg = np.zeros_like(x)
    rec_err = np.zeros_like(x)
    rec_fnd = np.zeros_like(x)
    for i in range(l):
        if rec_num[i] != 0:
            continue
        for j in prange(i + 1, l):
            if (a[i] == m[j] and b[i] == n[j] and m[i] == a[j] and n[i] == b[j]):
                avg = (x[i] + x[j]) / 2
                err = abs(x[i] - x[j]) / abs(avg)
                rec_num[i] = j + 1
                rec_num[j] = i + 1
                rec_avg[i] = avg
                rec_avg[j] = avg
                rec_err[i] = err
                rec_err[j] = err
                rec_fnd[i] = 1
                rec_fnd[j] = 1
                break
    return(rec_num, rec_avg, rec_err, rec_fnd)

我期望 numba 能够按照文档中的描述进行支持,并且描述numpy.zeros()之间没有区别。我想知道不正确的缓存是否与我的代码中可能出现的错误有关。numpy.zeros()numpy.zeros_like()

标签: pythonnumpynumba

解决方案


推荐阅读