我写了一个Python程序,它作用于一个大的输入文件,创建了几百万个表示三角形的对象.算法是:
在打印三角形之前打印出完整的顶点列表的OFF的要求意味着在将输出写入文件之前我必须在内存中保存三角形列表.与此同时,由于列表的大小,我遇到了内存错误.
告诉Python我不再需要某些数据的最佳方法是什么,它可以被释放?
我正在使用python来分析一些大文件,而且我遇到了内存问题,所以我一直在使用sys.getsizeof()来尝试跟踪使用情况,但是numpy数组的行为很奇怪.这是一个涉及我必须打开的反照率地图的例子:
>>> import numpy as np
>>> import struct
>>> from sys import getsizeof
>>> f = open('Albedo_map.assoc', 'rb')
>>> getsizeof(f)
144
>>> albedo = struct.unpack('%df' % (7200*3600), f.read(7200*3600*4))
>>> getsizeof(albedo)
207360056
>>> albedo = np.array(albedo).reshape(3600,7200)
>>> getsizeof(albedo)
80
Run Code Online (Sandbox Code Playgroud)
那么数据仍然存在,但是对象的大小,一个3600x7200像素的映射,从大约200 Mb变为80字节.我希望我的记忆问题已经结束,只是将所有内容转换为numpy数组,但我觉得这种行为,如果是真的,会在某种程度上违反信息理论或热力学的某些定律,或者其他什么,所以我是倾向于认为getsizeof()不适用于numpy数组.有任何想法吗?