运行scipy插值时的内存错误问题(interp1d)

时间:2016-06-29 21:10:14

标签: python memory scipy interpolation

我试图用各种插值方法运行scipy 1d-interpolation(interp1d)。数据是一个包含525600个数字的数组。当我使用简单的方法运行它时,如线性'线性'最近'或者'零',它工作正常,但当我使用'立方体'或者'二次',它导致内存错误如下:

Traceback (most recent call last):
File "inter_comp.py", line 37, in <module>
interp = interp1d(indices[not_nan], B[not_nan], bounds_error=False,fill_value=0.,  kind = 'cubic')
File "/lustre/work/apps/anaconda/lib/python2.7/site-   packages/scipy/interpolate/interpolate.py", line 476, in __init__
self._spline = splmake(self.x, self._y, order=order)
File "/lustre/work/apps/anaconda/lib/python2.7/site-packages/scipy/interpolate/interpolate.py", line 2356, in splmake
B = _fitpack._bsplmat(order, xk)
MemoryError

我的代码如下:

filn1 = "/lustre/work/hwon/PAPER2/Data/BAO_NEW/1year_New/BAO010_2013_WS_N.txt"

B = np.genfromtxt(filn1,delimiter="",usecols=0,dtype=None)
not_nan = np.logical_not(np.isnan(B))
indices = np.arange(len(B))
interp = interp1d(indices[not_nan], B[not_nan], bounds_error=False, fill_value=0.,  kind = 'cubic')
p1 = interp(indices)

我不确定我使用的计算平台的问题,还是处理数据或编码的方式。

请您解决这个问题吗?

谢谢你, 艾萨克

1 个答案:

答案 0 :(得分:2)

interp1d中的样条插值使用完整矩阵。更好地使用splev / splrep组合,UnivariateSpline或CubicSpline(将来可用于scipy版本)。

编辑:从scipy 0.19.0及更高版本开始,此答案已过时,其中interp1d不再使用完整矩阵。