下の例では、大きな数字のnumpy
オブジェクトを作成しています。対角線に乱数を入れてから、scipy
スパース行列に変換します。私のメモリ使用量の報告は、タスクマネージャからのものです。スパース行列はどのようにメモリ使用量に影響しますか?
>>> import sys, random
>>> import numpy as np
>>> from scipy import sparse
## Memory in use at this point: 3.1 Gb
>>> m = np.zeros(shape = (40000, 40000), dtype = float)
>>> sys.getsizeof(m)
12800000112
## Memory in use at this point: 3.3 Gb
>>> for i in range(40000):
m[i][i] = round(random.random(),3)
>>> sys.getsizeof(m)
12800000112
## Memory in use at this point: 3.3 Gb
>>> mSp = sparse.csr_matrix(m)
>>> sys.getsizeof(mSp)
56
## Memory in use at this point: 14.9 Gb
>>> del m
## Memory in use at this point: 3.1 Gb
スパース行列の作成中にメモリ使用量が15ギガバイトにジャンプし、私が最初にメモリの唯一の200 Mbのを取り上げたオリジナルのnumpyのオブジェクトを削除していたときにのみ、3.1 GBに倒れ、なぜ私の質問は、あります?
これは、使用されているメモリとコミットされているメモリと何らかの関係があると考えられていますが、メカニズムを理解するためには不安定です。
編集:私はこれは疎行列でなく、現代のオペレーティングシステムの方法とは何の関係もないのWindows 10上で
LinuxまたはUnixにはありますか? –
いいえ、この例はWindows 10で作成されました – Tony