如何解决加速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 举报,一经查实,本站将立刻删除。