我在循环中使用 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 相关的内存泄漏(我使用的是 0.19.1 版),但它应该在 SciPy 0.12.0 的最终版本中得到解决。
我感谢有关如何解决或解决此问题的任何建议,或者如果我做错了任何建议。如果您需要更多信息,请与我们联系。