2

「TIFFFiles」のリストがあります。各「TIFFFiles」には、それぞれサイズが 2776x2080 ピクセルの 60 個の tiff イメージを含む「TIFFArray」が含まれています。画像は numpy.memmap オブジェクトとして読み取られます。画像のすべての強度にアクセスしたい (imgs の形状: (60,2776,2080))。次のコードを使用します。

for i in xrange(18):

    #get instance of type TIFFArray from tiff_list
    tiffs = get_tiff_arrays(smp_ppx, type_subfile,tiff_list[i])

    #accessing all intensities from tiffs
    imgs = tiffs[:,:,:]

各反復ステップで「tiffs」と「imgs」を上書きしても、メモリは 2.6GByte 増加します。各反復ステップでデータがコピーされないようにするにはどうすればよいですか? 2.6GByteのメモリを再利用する方法はありますか?

4

1 に答える 1

0

それはおそらく答えではないことはわかっていますが、とにかく役立つかもしれませんし、コメントするには長すぎました.

数回前、大きな (>1Gb) ascii ファイルを でnumpy読み込んでいるときにメモリの問題が発生しnumpy.loadtxtました。

私が理解したことから、埋める配列のサイズが事前にわかっている場合は、それを割り当てて、たとえばloadtxt. これにより、一時オブジェクトの割り当てが防止numpyされ、メモリの観点からも改善される可能性があります。

mmap、または同様のアプローチは、メモリ使用量の改善に役立ちますが、私はそれらを使用したことはありません.

編集

メモリの使用量と解放に関する問題は、大きなファイルの問題をいつ解決しようとしていたのか不思議に思いました。基本的に私は持っていた

def read_f(fname):
    arr = np.loadtxt(fname)  #this uses a lot of memory
    #do operations
    return something  
for f in ["verylargefile", "smallerfile", "evensmallerfile"]:
    result = read_f(f)

私が行ったメモリプロファイリングから、戻ったときloadtxtも、戻っread_fて小さなファイルで再度呼び出したときも、メモリの解放はありませんでした。

于 2013-02-05T10:00:14.557 に答える