Sie können nicht JIT Methoden gebunden, aber Sie können nicht gebundene Methoden JIT (aber nur in Objekt-Modus):
from numba import jit
class some_class:
def __init__(self, something = 0):
self.number = something
def get_num(self):
return self.number
func = jit(get_num)
my_object = some_class(5)
print(my_object.func())
# 5
Beachten Sie, dass dies nicht nopython
Modus nicht verwendet, so sollten Sie nicht erwarten irgendwelche vernünftigen Beschleunigungen. Man könnte die Klasse macht sich ein jitclass
(das bedeutet, dass alle Methoden nopython-jitted automatisch), aber es erfordert, dass Sie die Attribute eingeben:
import numba as nb
spec = [
('number', nb.int64),
]
@nb.jitclass(spec)
class some_class:
def __init__(self, something):
self.number = something
def get_num(self):
return self.number
my_object = some_class(5)
print(my_object.get_num())
Aber für kompliziertere Klassen wird es sehr schwer werden (oder unmöglich) zu Verwenden Sie jitclass
. Nach meiner Erfahrung ist der beste Weg, um die jitted Funktionen innerhalb der Methode rufen Sie einfach an:
from numba import njit # like jit but enforces nopython-mode!
@njit
def my_func(val):
return val # this example is a bit stupid, I hope your real code does more!
class some_class:
def __init__(self, something = 0):
self.number = something
def get_num(self):
return my_func(self.number)
my_object = some_class(5)
print(my_object.get_num())
Es hängt davon ab, wie komplex Ihre Klasse und/oder Ihre Methode ist, welcher Ansatz verwendet werden soll. In Ihrem Fall würde ich numba überhaupt nicht benutzen, weil es einfach nicht genug rechenintensive Sachen gibt, die den Numba und Jit Overhead kompensieren würden. Wenn es etwas komplizierter wäre, würde ich jitclass
verwenden, und wenn es viel komplizierter wäre, würde ich die jitted-Funktion verwenden, die aus dem Funktionsansatz heraus aufgerufen wird. Persönlich würde ich nie jit
für eine Methode verwenden, da dies implizit Objekt-Modus erfordert, so ist es wahrscheinlich, dass die Jitted-Funktion langsamer ist als die Unjitted-Funktion.
Durch die Art und Weise: In Python Sie in der Regel property
anstelle von get_*
oder set_*
Funktionen ...