我想将一个类对象传递给一个函数。我可以让它工作,但我想知道是否有我可以分配的类型?我有一个我正在尝试做的“最小”示例。
spec = [("a", float64),("b",float64)]
@jitclass(spec)
class SOMETHING_3():
def __init__(self):
self.a = 1.1
self.b = 2.3
def sum(self):
return self.a + self.b
@jit(float64(float64, XXX), nopython = True)
def get_sum_3(c, someobj):
d = 0
for i in range(1000):
for j in range(1000):
d += c + someobj.sum()
return d
Run Code Online (Sandbox Code Playgroud)
如果我删除显式类型赋值“float64(float64, XXX)”,它工作正常。
但是有什么我可以用 XXX 替换它来告诉它是我正在传递的类对象。
如果你用 SOMETHING_3.class_type.instance_type 替换了 XXX,你给出的代码应该可以工作。
值得注意的是,如果您尝试接收一组 jitclass 对象,这将变得更加棘手(我认为目前这是不可能的)。如果您的完整问题/代码涉及这些 jitclass 对象的数组,我建议您考虑使用 NumPy 结构化数组而不是 jitclass。这主要是因为当前版本的 Numba 似乎不支持使用 jitclass 对象数组作为函数参数。这样做的原因是 jitclass 对象的数组将被解释为具有 numpy.object dtype 的 NumPy 数组,这在 Numba 的 nopython 模式中不受支持。由于它是 Numba 无法降低的类型(编译以在 nopython 模式下使用),因此 nopython 模式对于延迟编译(无函数签名)都会失败,
更新:
现在支持 jitclass 对象列表,但是在 Python 和 nopython 编译代码之间传递它们的开销非常大,所以请记住这一点。
| 归档时间: |
|
| 查看次数: |
1724 次 |
| 最近记录: |