我可以有一组嵌套的 numba 对象吗?

Can I have an array of nested numba objects?

假设我有 2 个 类,A 和 B,我已经 jitted,其中 B 有一个 A 的列表。这在 numba 中可能吗?

from numba import jitclass, deferred_type
from numba.types import string

spec = [('name', string)]


@jitclass(spec)
class A:
    def __init__(self, name):
        self.name = name

a_type = deferred_type()
a_type.define(A.class_type.instance_type)
spec2 = [('name', string), ('alist', a_type[:])]
@jitclass(spec2)
class B:
    def __init__(self, name, alist):
        self.name = name
        self.alist = alist

当我 运行 执行此操作时,出现以下错误:

python3: /opt/miniconda/conda-bld/llvmdev_1498055795382/work/llvm-4.0.0.src/lib/IR/DataLayout.cpp:638: unsigned int llvm::DataLayout::getAlignment(llvm::Type*, bool) const: Assertion `Ty->isSized() && "Cannot getTypeInfo() on a type that is unsized!"' failed.
Aborted (core dumped)

有什么办法可以解决这个错误吗?

您尝试执行的操作有一些限制:

  • Numba 无法将字符串转换为本机类型,据我所知,您不能拥有 string
  • 类型的实例变量
  • Numba 不支持数组或对象列表作为 numba-jitted 函数或 jitclasses 的参数。

因此 numba 可能不适合您的用例,除非您可以将字符串转换为某种本机类型(可能是整数标签,然后重新映射到 numba 调用之外的字符串),并表示 A 作为一系列同质的 numpy 数组或列表。