Python 如何在没有numpy的情况下在jit装饰器上设置2d数组?
我正在使用Python3中的Numba库 函数的参数是二维数组 我将Numba jit decorators设置为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 矩阵=
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的误解,并让我更清楚地了解它。