当某些 int 列表为空时,如何将 int 列表列表传递给 jitclass?

  • 本文关键字:列表 int jitclass python numba
  • 更新时间 :
  • 英文 :


我正在尝试创建一个包含 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])

最新更新