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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...