微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

将 numba 用于树结构的准则是什么?

如何解决将 numba 用于树结构的准则是什么?

编辑:忘记多次运行 numba(哎呀!)

我已经将 namedtuple 和 Dict 的 numba 版本视为潜在的解决方案,但与它们的 Python 版本相比,它们似乎要慢得多(大约慢 10000 倍)。

import time
from numba import njit
from collections import namedtuple    

Alpha = namedtuple("Alpha",["a","b","c"])    
Regions = namedtuple("Regions","b"])    
State = namedtuple("State",["H","L"])    
Parameters = namedtuple("Parameters",["alpha","DB","beta","psi","pi","CC_opt"])    

def timer_func(func):
    def function_timer(*args,**kwargs):    
        start = time.time()    
        value = func(*args,**kwargs)    
        end = time.time()    
        runtime = end - start    
        msg = "{func} took {time} seconds to complete its execution."    
        print(msg.format(func=func.__name__,time=runtime))    
        return value    

    return function_timer    


@timer_func    
def build_params() -> Parameters:    
    alpha = Regions(    
        a=Alpha(0.5,0.5,0),b=Alpha(0.5,)    

    return Parameters(alpha=alpha,DB=State(0.0,0.0),beta=0.8,psi=0.0,pi=0.5,CC_opt=1.0)    


@timer_func    
@njit    
def build_params_numba() -> Parameters:    
    alpha = Regions(    
        a=Alpha(0.5,CC_opt=1.0)    


if __name__ == "__main__":    
    build_params()    
    build_params_numba()

build_params 用了 3.814697265625e-06 秒完成它的执行。

build_params_numba 用了 0.07473492622375488 秒完成它的执行。

编辑:

build_params_numba 用了 3.5762786865234375e-06 秒完成它的执行。

解决方法

最大的问题是您正在测量 build_params_numba 的第一次执行,其中包括编译(它按照您的要求实时编译)。这就像测量经典餐点和微波炉餐之间的晚餐时间,但是您将购买和安装微波炉的时间作为后者的一部分。 Measure the second invocation of build_params_numba,当编译已经完成时,查看编译函数的执行情况。

第二个问题是 numba 可能对您的代码没有太大帮助。 AFAIK 它旨在加速数值算法和 numpy 代码。根据需要,namedtupledict 是 Python 数据结构,numba 必须这样对待它们;因此,即使您请求了 nopython 模式,Numba 也无法提供帮助,因为它仅在可以检测到代码中所有值的本机数据类型时才有效(我认为 - 虽然在这一点上不是 100% 确定)。>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?