如何从 jitclass 中提取 class 类型并单独指定它

how to extract class type from a jitclass and specify it alone

我有一个 jitclass 说 weather 并保存它的一个属性 att = weather.class_type.instance_type 以在另一个 jit 函数中使用来指定它的输出样式。

out_style = Tuple.from_types((ListType(att)))
@jit([out_style(nb.int64, nb.int64)], nopython=True)
def new_function():
    ......

该属性打印如下。

27725c129d0<_data:array(float64, 2d, A),_colmap:DictType[unicode_type,int64]<iv=None>,date0:datetime64[M],_tdelta:timedelta64[M]>

现在想把这个jitclass去掉,还是想手动指定这个属性再用。我看到有四种数据类型,array(float64, 2d, A)DictType[unicode_type,int64]datetime64[M]timedelta64[M]

我是这样声明的,但是报错如下

out_style = Tuple.from_types((ListType(nb.types.Array(nb.float64, 2, 'A'), DictType(nb.types.unicode_type, bb2), nb.types.NPDatetime('M'), nb.types.NPTimedelta('M')))


TypeError: __init__() takes 2 positional arguments but 5 were given

请帮助解决这个问题。谢谢。

我不确定我是否理解正确。 ListType() 只能包含一个参数。就我而言,我在 ListType() 中添加了四个。它会导致错误。这里 att 的类型是 classinstancetype。由于 jitclass 如前所述被删除,哪种数据类型是一个很好的选择,tuple?

nb.types.Tuple.from_types 在参数中获取一个列表,该列表应包含每种类型的元组。例如:

nb.types.Tuple.from_types([
    nb.types.ListType(nb.types.int32), 
    nb.types.float64, 
    nb.types.int64
])

这是一种包含 3 个元素的元组:一个 32 位整数列表、一个 64 位浮点数和一个 64 位整数。

根据你的代码,我猜你想要这个:

out_style = nb.types.Tuple.from_types([
    nb.types.ListType(nb.float64[:,:]), 
    nb.types.DictType(nb.types.unicode_type, bb2), 
    nb.types.NPDatetime('M'), 
    nb.types.NPTimedelta('M')
])