如何在Numba jitclass中创建空的float64类型化列表?
在Numba JitClass中创建空的float64类型列表
问题根源
空列表[]无法被Numba自动推断出具体类型,而jitclass要求成员变量类型必须与装饰器中声明的numba.types.ListType(numba.types.float64)严格匹配,因此直接赋值空列表会触发TypingError。
解决方案
使用Numba提供的numba.typed.List显式创建指定类型的空列表,以下是两种可行方式:
方式一:使用empty_list直接生成指定类型空列表(推荐)
通过List.empty_list()方法可以直接创建目标类型的空列表,无需额外操作:
import numba from numba.experimental import jitclass from numba.typed import List @jitclass([('l', numba.types.ListType(numba.types.float64))]) class test: def __init__(self): self.l = List.empty_list(numba.types.float64) test()
方式二:先初始化再调整(备选)
如果需要先添加元素再清空,也可以用这种方式:
import numba from numba.experimental import jitclass from numba.typed import List @jitclass([('l', numba.types.ListType(numba.types.float64))]) class test: def __init__(self): self.l = List() self.l.append(0.0) # 添加一个float64类型元素以确定列表类型 self.l.clear() # 清空列表得到空的类型化列表 test()
关键说明
numba.typed.List是Numba专门用于创建类型化容器的工具,必须显式导入后使用。- 两种方式都能确保列表类型与jitclass中声明的
float64列表类型完全匹配,避免类型推断错误。
内容的提问来源于stack exchange,提问作者user19976975
相关产品推荐
相关产品推荐

