gpt4 book ai didi

python - 如何通过方法使用 numba.jit

转载 作者:行者123 更新时间:2023-12-04 23:14:34 25 4
gpt4 key购买 nike

使用 numba.jit在 python 。

我可以将普通函数转换为 jit 类型并运行:

from numba import jit

def sum(a, b):
return a+b

func = jit(sum)
print(func(1, 2))

如何对方法执行此操作?像这样的东西(这不起作用,我知道为什么)。
from numba import jit

class some_class:
def __init__(self, something = 0):
self.number = something
def get_num(self):
return self.number

my_object = some_class(5)
func = jit(my_object.get_num)
print(my_object.func())

附言我也尝试过装饰器,它可以工作,但我不能将它用于导入的类(我自己没有定义的类),所以我正在研究这个。

最佳答案

你不能 jit 绑定(bind)方法,但您可以 jit 未绑定(bind)的方法(但仅限于对象模式):

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模式,所以你不应该期望任何合理的加速。您可以将类(class)本身设为 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如果它更复杂,我会使用从函数方法中调用的 jited 函数。就我个人而言,我永远不会使用 jit对于一个方法,因为它隐含地需要对象模式,所以很可能 jitted 函数比 unjitted 函数慢。

顺便说一句:在 Python 中,您通常使用 property而不是 get_*set_*职能...

关于python - 如何通过方法使用 numba.jit,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46808362/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com