(하지만 객체 모드에서) 당신은 이 방법을 결합 JIT 수는 없지만, 언 바운드 방법을 JIT 수 있습니다
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
주를 예상해서는 안이, nopython
모드를 사용하지 않음 합리적인 속도 향상. 당신은 클래스를 만들 수있는 자체 jitclass
(즉, 모든 메소드가 자동으로 nopython-jitted 의미) 그러나 당신이 속성 입력해야합니다 :에
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())
그러나 더 복잡한 클래스가 매우 어려운 (또는 불가능)이 될 것이다 jitclass
을 사용하십시오. 내 경험에 의하면 가장 좋은 방법은 단순히 방법 내에서 jitted 함수를 호출하는 것입니다
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())
그것은 당신의 클래스 및/또는 방법이 사용되어야하는 접근 방식이 얼마나 복잡한에 따라 달라집니다. 귀하의 경우 numba를 전혀 사용하지 않을 것입니다. numba와 jit 오버 헤드를 보완 할 수있는 계산 상으로 값 비싼 물건이 충분하지 않기 때문입니다. 조금 더 복잡하다면 jitclass
을 사용하고 훨씬 더 복잡하다면 함수 접근법에서 호출되는 jitted 함수를 사용할 것입니다. 개인적으로 나는 jit
을 암시 적으로 객체 모드가 필요하므로 결코 사용하지 않을 것입니다. 그래서 jitted 함수는 unjitted 함수보다 느립니다. 그런데
: 당신은 일반적으로 대신 get_*
또는 set_*
기능 property
을 사용하여 파이썬에서 ...