[問題] 迭代次數太高,字典問題

作者: qaz28787493 (jonny)   2022-05-13 08:59:19
題目我就簡單說
我有一個類,名稱叫dot
class dot(object) :
def __init__(self) :
self. Attr1={}
Example=dot()
while(k<=10000):
result=繁瑣的計算過程,需要用到上一次的Attr1的值
Example. Attr1[k] =result
k=k+1
請問我該怎麼讓我這方式的內存壓力小一點,我的電腦內存是16的
作者: lycantrope (阿寬)   2022-05-13 09:19:00
可以用functools.lru_cache不用自己刻記憶體不夠,也可以物件轉pickle暫存硬碟
作者: Schottky (順風相送)   2022-05-13 11:09:00
或許你根本不需要用字典記住全部結果重新審視一下那個繁瑣的計算過程,也許可以大幅簡化
作者: single4565 (leekdumpling韭菜水餃)   2022-05-13 12:48:00
試試看field?
作者: qaz28787493 (jonny)   2022-05-13 13:37:00
Sch大 我了解了Single大,我去了解一下lycan大 好,知道了
作者: mikemike1021 (mike)   2022-05-13 14:22:00
result 如果只是單一值的話 用 list 或 array,然後可以先把需要的大小弄出來,不要讓他自己加,最慘的狀況記憶體的需求可能是原先的兩倍另外如果不需要中間結果,只存上一次的結果過來用即可
作者: polom (Polom)   2022-05-13 23:33:00
考慮用 nympy dtype
作者: ssivart   2022-05-14 01:31:00
看演算法能不能優化
作者: wray (Rayf)   2022-05-16 21:53:00
只留上一次要用的值,太舊用不到的把它放掉
作者: celestialgod (天)   2022-05-17 13:05:00
試試看Cython Linux只要裝好g++ pythondev windows比較麻煩要裝VC++ 但是效能應該可以好很多https://tinyurl.com/yusbeekf我那時候把Python改成Cython快了10倍以上
作者: Sunal (SSSSSSSSSSSSSSSSSSSSSSS)   2022-05-17 16:30:00
先動演算法再換 interpreter 吧...
作者: qaz28787493 (jonny)   2022-05-20 23:43:00
謝謝大家的意見,小弟還在處理中

Links booklink

Contact Us: admin [ a t ] ucptt.com