如何在没有 numpy 的情况下在 jit 装饰器上设置二维数组?
How to set 2d array on jit decorator without numpy?
我在 Python3 中使用 Numba 库。
一个函数的参数是一个二维数组。
我将 Numba jit 装饰器设置为 list[list[int]]
,但在 运行 代码后显示 TypeError: 'type' object is not subscriptable
。
我使用print(numba.typeof(matrix))
检测参数类型,它是returnlist(reflected list(int32))
类型。
但即使我将装饰器更改为 list[list[numba.int32]]
,也不起作用。
代码:
from numba import jit
size = 3
matrix = [[0, 1, 2], [4, 5, 6], [7, 8, 9]]
@jit(list[list[int]])
def test(jitmatrix):
_total = 0
for i in range(size):
for j in range(size):
_total += jitmatrix[j][i]
test(matrix)
知道在没有 numpy 库的情况下在 jit 装饰器上设置二维数组吗?
还是必须使用numpy库?
从 0.44 开始,Numba 不支持列表列表作为 nopython 模式下函数的输入。参见:
http://numba.pydata.org/numba-doc/latest/reference/pysupported.html#list-reflection
在 @jit
的参数中,numba 不知道 list
并且无法将其自动转换为任何 numba 类型。 TypeError ... subscriptable
错误来自 python 本身,因为您试图访问 built-in 类型的元素(在本例中为 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)
我在 Python3 中使用 Numba 库。
一个函数的参数是一个二维数组。
我将 Numba jit 装饰器设置为 list[list[int]]
,但在 运行 代码后显示 TypeError: 'type' object is not subscriptable
。
我使用print(numba.typeof(matrix))
检测参数类型,它是returnlist(reflected list(int32))
类型。
但即使我将装饰器更改为 list[list[numba.int32]]
,也不起作用。
代码:
from numba import jit
size = 3
matrix = [[0, 1, 2], [4, 5, 6], [7, 8, 9]]
@jit(list[list[int]])
def test(jitmatrix):
_total = 0
for i in range(size):
for j in range(size):
_total += jitmatrix[j][i]
test(matrix)
知道在没有 numpy 库的情况下在 jit 装饰器上设置二维数组吗?
还是必须使用numpy库?
从 0.44 开始,Numba 不支持列表列表作为 nopython 模式下函数的输入。参见:
http://numba.pydata.org/numba-doc/latest/reference/pysupported.html#list-reflection
在 @jit
的参数中,numba 不知道 list
并且无法将其自动转换为任何 numba 类型。 TypeError ... subscriptable
错误来自 python 本身,因为您试图访问 built-in 类型的元素(在本例中为 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)