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