我正在使用 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
好吧,数据仍然存在,但对象的大小(3600x7200 像素图)已从 ~200 Mb 变为 80 字节。我希望我的记忆问题已经结束,只是将所有内容都转换为 numpy 数组,但我觉得这种行为,如果是真的,会在某种程度上违反信息论或热力学的某些定律,所以我倾向于相信 getsizeof() 不适用于 numpy 数组。有任何想法吗?