199

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 配列では機能しないと信じる傾向があります。何か案は?

4

3 に答える 3

302

array.nbytesたとえば、numpy 配列に使用できます。

>>> import numpy as np
>>> from sys import getsizeof
>>> a = [0] * 1024
>>> b = np.array(a)
>>> getsizeof(a)
8264
>>> b.nbytes
8192
于 2012-08-02T19:24:14.747 に答える