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

加速python2中的寻根算法

如何解决加速python2中的寻根算法

我们使用使用 Django(旧版本)创建的仪表板,它使用 python2 来运行后端脚本。

我们使用以下代码实现了寻根算法,在 python3 中需要 5 秒,但在 python2 中需要超过 30 秒,这导致 Web 服务器请求超时错误。它如何加快流程以避免此错误

def meet_the_target(factor):

#data processing with one for loop

return factor


def illinois_algorithm(f,a,b,y,margin=1000000):
    ''' Bracketed approach of Root-finding with illinois method
    Parameters
    ----------
    f: callable,continuous function
    a: float,lower bound to be searched
    b: float,upper bound to be searched
    y: float,target value
    margin: float,margin of error in absolute term
    Returns
    -------
    A float c,where f(c) is within the margin of y
    '''
    lower = f(a)[0]
    upper = f(b)[0]
    # assert y >= (lower),f"y is smaller than the lower bound. {y} < {lower}"
    # assert y <= (upper),f"y is larger than the upper bound. {y} > {upper}"

    stagnant = 0

    while 1:
        c = ((a * (upper - y)) - (b * (lower - y))) / (upper - lower)
        y_c = f(c)[0]
        if abs((y_c ) - y) < margin:
            # found!
            return c
        elif y < y_c:
            b,upper = c,y_c
            if stagnant == -1:
                # Lower bound is stagnant!
                lower += (y - lower) / 2
            stagnant = -1
        else:
            a,lower = c,y_c
            if stagnant == 1:
                # Upper bound is stagnant!
                upper -= (upper - y) / 2
            stagnant = 1

illinois_algorithm(meet_the_target,-0.9,0.9,target)

我们使用了多种求根算法,如二分法、逆二次、二分搜索和 scipy 优化库,所有这些方法python3 上运行速度很快,但在 python2 上需要时间。

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