Как я могу передать список int списков в jitclass, когда некоторые int списки пусты? - PullRequest
0 голосов
/ 21 января 2020

Я пытаюсь создать функцию jitclass со списком List of int.

Я пробовал различные сценарии ios (как показано в примере ниже), но у меня всегда появляется ошибка: 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]))

1 Ответ

0 голосов
/ 21 января 2020

Я получаю решение. Тип, переданный 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])
...