2017-02-06 9 views
3

私は70GBのmemmap配列から読み込み専用ですが、そこから〜300MBしか使用していません。 thisから学ぶと、memmapは実際に物理メモリを使用しないので、パフォーマンスを向上させるために、必要な配列を物理メモリにコピーする必要があります。numpyのmemmap配列をコピーするとどうなりますか?

しかし、コピーされた配列をnmap.copy()にコピーすると、そのクラスはmemmapになります。このような推測にかかわらず、コピーされた配列を使用すると、メモリ使用量とパフォーマンスが向上します。

コピーされたmemmapは物理メモリを使用しますか?または、何か他のことが場面の後ろに続いていますか?コピーされた配列に物理メモリを使用しているように見えますが、私のコンピュータはいつものように私を欺いていますか?

+0

私はmmapとあなたのmemmapが別のものだと思っています – YOU

+1

はい、違いはありますが、 'numpy.memmap'は' mmap'を使っています。 –

答えて

3

numpy.memmapnumpy.ndarrayのサブクラスです。 memmapndarray.copy()メソッドをオーバーライドしないため、ndarray.copy()のセマンティクスには触れません。新しく割り当てられたメモリへのコピーが実際に作成されます。いくつかの理由で、ndarray.copy()は、サブクラスが使用されたときに返されるオブジェクトの型を同じに保つように試みます。 numpy.memmapでは意味がありませんが、numpy.matrixのような他のサブクラスでは意味がありません。 numpy.memmapの場合

、コピーの属性固有mmapNoneに設定されているので、コピーされた配列は、その種類はまだnumpy.memmapになることを除いてちょうどnumpy.ndarrayのように動作します。ソースとコピーの両方の._mmap属性を確認して確認します。

+0

+1の答えは証明付きです!実際のmemmapの '._mmap'は私に' 'を与えますが、コピーされた配列の' ._mmap'は私に 'None'を与えます。 –

関連する問題