2

ループで scipy.interpolate.griddata を使用していますが、ループごとに Python がメモリを蓄積しています。これは、Mac OS X 10.6.8 で Python 2.7.5 と SciPy 0.12.0 (Macports 経由でインストール) を使用しています。

以下のこのコードは、scipy.interpolate.griddata リファレンス ガイドから変更されており、私の要点を示しています。

import numpy as np
from scipy.interpolate import griddata

def func(x, y):
    return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2

grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]
points = np.random.rand(1000, 2)
values = func(points[:,0], points[:,1])

for t in xrange(10000):
    griddata(points, values, (grid_x, grid_y), method='nearest')
    griddata(points, values, (grid_x, grid_y), method='linear')
    griddata(points, values, (grid_x, grid_y), method='cubic')

ループを増やすと、Python はより多くのメモリを消費します。

loop      memory
1        48.4 MB
10       52.7 MB
100      94.6 MB
1000    500.9 MB

これが griddata の意図した動作であるかどうかはわかりません。また、これが SciPy の過去のバージョンで発生しないことも確かではありません。この質問によると、Cython (私は ver. 0.19.1 を使用しています) に関連するメモリ リークがありますが、SciPy 0.12.0 の最終リリースで解決されているはずです。

この問題を修正または回避する方法についての提案、または何か間違ったことをしている場合のアドバイスをいただければ幸いです。さらに情報が必要な場合はお知らせください。

4

1 に答える 1