我正在使用 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 数组。有任何想法吗?
您可以array.nbytes用于 numpy 数组,例如:
array.nbytes
>>> import numpy as np >>> from sys import getsizeof >>> a = [0] * 1024 >>> b = np.array(a) >>> getsizeof(a) 8264 >>> b.nbytes 8192