Python 如何在没有numpy的情况下在jit装饰器上设置2d数组?

Python 如何在没有numpy的情况下在jit装饰器上设置2d数组?,python,arrays,python-3.x,numpy,numba,Python,Arrays,Python 3.x,Numpy,Numba,我正在使用Python3中的Numba库 函数的参数是二维数组 我将Numba jit decorators设置为list[list[int]],但在运行代码后显示TypeError:“type”对象不可订阅 我使用print(numba.typeof(matrix))检测参数类型,它返回list(reflectedlist(int32))type 但是,即使我将decorators更改为list[list[numba.int32]],也不起作用 代码: 从numba导入jit 尺寸=3 矩阵=

我正在使用Python3中的Numba库

函数的参数是二维数组

我将Numba jit decorators设置为
list[list[int]]
,但在运行代码后显示
TypeError:“type”对象不可订阅

我使用
print(numba.typeof(matrix))
检测参数类型,它返回
list(reflectedlist(int32))
type

但是,即使我将decorators更改为
list[list[numba.int32]]
,也不起作用

代码:

从numba导入jit
尺寸=3
矩阵=[[0,1,2],[4,5,6],[7,8,9]]
@jit(列表[list[int]])
def测试(JIT矩阵):
_总数=0
对于范围内的i(尺寸):
对于范围内的j(尺寸):
_总计+=矩阵[j][i]
测试(矩阵)
你有没有想过在没有numpy库的情况下在jit装饰器上设置2d数组


或者它必须使用numpy库?

从0.44起,Numba不支持列表列表作为nopython模式下函数的输入。见:

@jit
的参数中,numba不知道
列表
,无法将其自动转换为任何numba类型。
类型错误。。。subscriptable
错误来自python本身,因为您试图访问内置类型的元素(在本例中为
list
),这是不允许的

不过,以下方法可行:

from numba import jit
import numba as nb
import numpy as np

size = 3
matrix = np.array([[0, 1, 2], [4, 5, 6], [7, 8, 9]])


@jit(nopython=True)
# or @jit(nb.int64(nb.int64[:,:]))
def test(jitmatrix):
    _total = 0
    for i in range(size):
        for j in range(size):
            _total += jitmatrix[j,i]  # note the change in indexing, which is faster

    return _total


test(matrix)

正如我在最近的回答()中提到的,numba不支持列表列表。您传递的不是2d数组,因为Numba认为它是2d数组。如果您要通过
np.array(matrix)
并在decorator中删除类型规范,numba将能够解释它并jit代码。感谢您的解释和正确的示例,它让我知道了我对numba的误解,并让我更清楚地了解它。