numpy数组的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 

那么数据仍然存在,但对象的大小,一个3600×7200像素的地图,已经从〜200 Mb到80个字节。 我希望我的记忆问题已经结束,只是把所有的东西都转换成numpy数组,但是我觉得这种行为,如果是真的,会以某种方式违反信息论或热力学的某些规律,所以我倾向于认为getsizeof()不适用于numpy数组。 有任何想法吗?

您可以使用array.nbytes作为numpy数组,例如:

 >>> a = [0] * 1024 >>> b = np.array(a) >>> getsizeof(a) 8264 >>> b.nbytes 8192