Numba class 包含自定义 numba 对象列表
Numba class containing a list of custom numba objects
我希望 class 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'>]
我哪里错了...?或者不支持此功能?数 0.48,Python 3.7
我能够通过使用 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
我希望 class 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'>]
我哪里错了...?或者不支持此功能?数 0.48,Python 3.7
我能够通过使用 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