PTT
Submit
Submit
选择语言
正體中文
简体中文
PTT
Python
[问题] 跑递回数列效率问题
楼主:
shingai
(shingai)
2023-07-02 12:15:38
想请教
若我想利用python中的套件sympy
去计算出某递回数列的理论值
递回数列定义如下:
a_{n+2}=2*sin(15度)*a_{n+1}-a_n
a_1=2
a_2=2*sin(15度)
(不太确定套件这样用是否适合,总之跑得动,但要求14项数
之后的取值,就会卡住不动)
码如下:
from sympy import *
memo = {0:2, 1: (sqrt(6)-sqrt(2))/2}
def sinus_seq(n):
if not n in memo:
memo[n] = (2*(sqrt(6)-sqrt(2))/4)*sinus_seq(n-1)-sinus_seq(n-2)
return memo[n]
for i in range(12):
print("c[{}]={}".format(i,simplify(sinus_seq(i))))
执行时,当我把倒数第二列的range(k)改为k=15时,
利用计算时间的套件
显示出来的讯息
CPU times: total: 4min 8s
而k=12的讯息为CPU times: total: 12.7 s
数字k更大k>15,就会卡住不动了
想请教有没有可以改善更有效率的output出更多项的方法??例如要跑到第3000项数列值
先谢谢高手愿意分享!
作者:
chang1248w
(彩棠)
2023-07-02 13:36:00
为啥是用dict?
作者:
lycantrope
(阿宽)
2023-07-02 13:37:00
要先simplify后才存入memo可以用functools.lru_cache来达成你想要的效果
https://pastebin.com/ShZRPJey
if n==0: return 2
楼主:
shingai
(shingai)
2023-07-02 18:47:00
也太神奇了吧..原来有这种东西可以用 To 1F用dic不好吗?
作者:
mantour
(朱子)
2023-07-03 06:23:00
即然算第n项递回会把比n小的每一项都跑过一次,是不是直接从N=1开始往上建表就好
作者:
lycantrope
(阿宽)
2023-07-03 10:58:00
你也可以cache simplify会更快
https://pastebin.com/4PuUesfM
楼主:
shingai
(shingai)
2023-07-03 11:47:00
3Q~使用装饰器好像会拖速simplify = lru_cache(simplify)这个动作怎么想到的?
继续阅读
[问题] Python读取CSV档案,输出格式跑掉
fred1541
Re: [问题] line 防翻群机器人
lockeg
[问题] google or-tools排班问题
elucidator39
[问题] 我想请板上的大神们帮忙
stabile
[问题] 关于DataFrame分组计算的问题
sonicstars
[问题] VSCode 无法直接将档案拖入开启
aaa903132
[问题] 怎么把list里面的方括号去除掉?
peter308
[问题] 大量资料groupby 速率问题
qwtl0213
[问题] pyautogui无法在特定程式作用
hdln
[问题] 正则的分组匹配问题
god1230321
Links
booklink
Contact Us: admin [ a t ] ucptt.com