我正在尝试创建一个包含 int 列表的 jitclass 函数。
我尝试了各种方案(如以下示例所示(,但我总是收到一个错误说: 值错误: 无法键入空列表
问题是我需要有时 int 列表为空,这会导致错误
import numpy as np
from numba import jitclass,jit,njit,typeof
from numba import boolean, int32, float64,uint8
# spec1 = [
# ('list_int' ,int32[:]),
# ('list_float' ,float64[:]),]
# spec1 = [
# ('list_int' ,typeof([[],[1,2],[1,2,3,4,5,],[]])),
# ('list_float' ,typeof([[3.2],[],[3.3,6.8,5.],[]]))]
spec1 = [
('list_int' ,typeof(tuple([[],[1,2],[1,2,3,4,5,],[]]))),
('list_float' ,typeof(tuple([[3.2],[],[3.3,6.8,5.],[]])))]
@jitclass(spec1)
class example():
def __init__(self, list_int, list_float):
self.list_int = list_int
self.list_float = list_float
list_intA = [[],[1,2],[1,2,3,4,5,],[]]
list_floatB = [[3.2],[],[3.3,6.8,5.],[]]
# my_ex = example( list_intA ,
# list_floatB )
my_ex = example( tuple([np.array(l, dtype=np.int32) for l in list_intA]) ,
tuple([np.array(l, dtype=np.float64) for l in list_floatB]) )
# my_ex = example(np.array([np.array(l, dtype=np.int32) for l in list_intA]),
# np.array([np.array(l, dtype=np.int32) for l in list_floatB]))
我最终得到了一个解决方案。传递给 jitclass 的类型不正确。
import numpy as np
from numba import jitclass,jit,njit,typeof, types,typed
spec1 = [
('list_int' , types.List(typeof(np.array([], dtype=np.int32)))),
('list_float' , types.List(typeof(np.array([], dtype=np.float64)))),
]
@jitclass(spec1)
class example():
def __init__(self, list_int, list_float ):
self.list_int = list_int
self.list_float = list_float
list_intA = [[],[1,2],[1,2,3,4,5,],[-1]]
list_floatB = [[],[1.,2.],[1.,2.,3.,4.,5.,],[-1.]]
my_ex = example( [np.array(l, dtype=np.int32) for l in list_intA],
[np.array(l, dtype=np.float64) for l in list_floatB])