[问题] 迭代次数太高,字典问题

楼主: 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