Я использую scipy.interpolate.griddata в цикле, и это заставляет Python накапливать память с каждым циклом. Это использует Python 2.7.5 и SciPy 0.12.0 (установленный через Macports) в Mac OS X 10.6.8.Утечка памяти в SciPy griddata (версия 0.12.0)
Этот код, приведенный ниже, приведен в справочном руководстве 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. Согласно this question, происходит утечка памяти, связанная с Cython (я использую версию 0.19.1), но она должна была быть решена в финальной версии SciPy 0.12.0.
Я ценю любые предложения о том, как я могу исправить или обмануть эту проблему, или любой совет, если я что-то делаю неправильно. Дайте мне знать, если вам нужна дополнительная информация.