Python Numba:存储在类中的抖动函数

问题描述

我正在尝试组合存储在类中的 jit 函数。函数本身是 jitted,但是 jitting 结合这些的函数失败了:

Untyped global name 'self': Cannot determine Numba type of <class '__main__.a_class'>

MWE:

import numpy as np
from numba import njit


class a_class:
    def __init__(self):
        self.functions = []

    def add_random_function(self):
        power = np.random.random()

        @njit
        def fn(x):
            return x**power
        self.functions.append(fn)

    def jit_functions(self):
        @njit
        def jitted_sum(x):
            ans = 0
            for function in self.functions:
                ans += function(x)
            return ans
        self.jitted_sum = jitted_sum


my_class = a_class()
my_class.add_random_function()
my_class.add_random_function()
my_class.jit_functions()
my_class.jitted_sum(2)

这些函数的计算量比这个例子中的要多得多,而且它们和它们的组合会从 jitted 中受益。

有没有办法在一个类中收集这些函数,并从它们生成一个新函数,或者任何其他允许我编译使用其他函数的函数的解决方法,我该如何存储它们? (函数将由作为类实例属性的参数定义)

错误:

TypingError: Failed in nopython mode pipeline (step: nopython frontend)
Untyped global name 'self': Cannot determine Numba type of <class '__main__.a_class'>

File "<ipython-input-8-52f3da1fe6b5>",line 23:
        def jitted_sum(x):
            <source elided>
            ans = 0
            for function in self.functions:
            ^

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)