SciPy griddata中的内存泄漏(版本0.12.0)

时间:2013-07-03 01:10:57

标签: python scipy interpolation

我在循环中使用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版本中是否会发生这种情况。根据{{​​3}},存在与Cython相关的内存泄漏(我使用的是版本0.19.1),但它应该在SciPy 0.12.0的最终版本中得到解决。

我感谢任何有关如何解决或解决此问题的建议,或者如果我做错了什么建议。如果您需要更多信息,请与我们联系。

1 个答案:

答案 0 :(得分:2)

如果仍然很重要,问题是scipy 0.12.0和0.12.1可能已经发布而没有相关文件的cython重新编译。

所以以下内容对我有用:

首先将cython更新到最新版本0.19.2,然后从源代码重新编译scipy(但是来自github,而不是来自.tar.gz):

git clone https://github.com/scipy/scipy.git
cd scipy
git checkout maintenance/0.12.x
python setup.py build
cd ..
pip install -U ./scipy

然后帖子的例子没有泄漏。

更新:其实我已经意识到错误地将/0.13.x分支改为 - /0.12.x仍然显示内存泄漏......