Python 如何在numba.njit()中使用numpy.array的索引?

Python 如何在numba.njit()中使用numpy.array的索引?,python,numpy,numpy-ndarray,numba,Python,Numpy,Numpy Ndarray,Numba,如何在numba.njit()中使用numpy.array的索引?在下面的示例中,如果使用numba.njit,代码将退出并出现错误。我发现这个错误是由于“b=a[idx]”。但事实上,这在python中应该是正确的。如何在numba中纠正这一点?thx @numba.njit() def test(a): idx = np.where(a>5) b = a[idx] return b a = np.linspace(0,15,16).reshape([4,4

如何在numba.njit()中使用numpy.array的索引?在下面的示例中,如果使用numba.njit,代码将退出并出现错误。我发现这个错误是由于“b=a[idx]”。但事实上,这在python中应该是正确的。如何在numba中纠正这一点?thx

@numba.njit()
def test(a):
    idx = np.where(a>5)
    b   = a[idx]
    return b

a = np.linspace(0,15,16).reshape([4,4])
b = test(a)

签出此文档

b=试验(a)

尝试在此处更改变量,如下所示

k=test(a),我认为test(a)=b,这意味着像b=b

如果可以的话,试试看……

假设也支持高级索引的子集:只允许一个高级索引,并且它必须是一维数组

如果您在不使用numba的情况下运行代码,您可以看到结果仍然是1D数组:

>>> a[np.where(a > 5)]
array([ 6.,  7.,  8.,  9., 10., 11., 12., 13., 14., 15.])
因此,您可以直接在1D阵列上操作:

@nb.njit()
def test(a):
    a = a.ravel()
    idx = np.where(a > 5)
    b = a[idx]
    return b
或者更简单:

@nb.njit()
def test(a):
    a = a.ravel()
    return a[a > 5]