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

问题描述 投票:0回答:1

我正在尝试创建一个包含int列表列表的jitclass函数。

我尝试了各种情况(如下面的示例所示),但是我总是遇到一个错误:ValueError:无法键入空列表

问题是我有时需要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]))
python numba
1个回答
0
投票

我最终找到了解决方案。传递给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])
© www.soinside.com 2019 - 2024. All rights reserved.