【问题标题】:Numba class containing a list of custom numba objects包含自定义 numba 对象列表的 Numba 类
【发布时间】:2020-03-10 07:23:27
【问题描述】:

我希望 B 类包含 A 对象的列表,如下所示:

from numba import int8, jitclass, types, typed


@jitclass([("field", int8)])
class A:
    def __init__(self):
        self.field = 1


@jitclass([("container", types.ListType(A))])
class B:
    def __init__(self):
        self.container = typed.List(A())


if __name__ == "__main__":

    b = B()

错误:

Failed in nopython mode pipeline (step: nopython frontend)
Invalid use of Function(<class 'numba.types.containers.ListType'>) with argument(s) of type(s): (instance.jitclass.A#7f994ec4a860<field:int8>)
 * parameterized
In definition 0:
    TypeError: typer() takes 0 positional arguments but 1 was given
    raised from /home/xxx/miniconda3/envs/yyy/lib/python3.7/site-packages/numba/typing/templates.py:283
In definition 1:
    TypeError: typer() takes 0 positional arguments but 1 was given
    raised from /home/xxx/miniconda3/envs/yyy/lib/python3.7/site-packages/numba/typing/templates.py:283
This error is usually caused by passing an argument of a type that is unsupported by the named function.
[1] During: resolving callee type: typeref[<class 'numba.types.containers.ListType'>]

我哪里做错了...?还是不支持此功能? Numba 0.48,Python 3.7

【问题讨论】:

    标签: numba


    【解决方案1】:

    我能够通过使用typeof 方法来实现这一点。但是,首先我必须创建 A 列表的实例(我不确定是否可以避免这种情况)。

    from numba import int8, jitclass, types, typed, typeof
    
    
    @jitclass([("field", int8)])
    class A:
        def __init__(self):
            self.field = 1
    
    list_instance = typed.List()
    list_instance.append(A())
    
    @jitclass([("container", typeof(list_instance))])        
    class B:
        def __init__(self, container):
            self.container = container
    
    list_a = typed.List()
    list_a.append(A())
    list_a.append(A())
    b = B(list_a)
    print(b)
    print(b.container)
    print(b.container[0].field)
    

    输出:

    <numba.jitclass.boxing.B object at 0x0000020BF396C0B0>
    [<numba.jitclass.boxing.A object at 0x0000020BF385AEB0>, <numba.jitclass.boxing.A object at 0x0000020BF385A810>]
    1
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-04
      • 2018-11-17
      • 1970-01-01
      • 2020-08-21
      • 2019-01-04
      • 2022-01-22
      • 2021-08-18
      • 1970-01-01
      相关资源
      最近更新 更多