问题描述
我正在尝试组合存储在类中的 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 (将#修改为@)