我试图用各种插值方法运行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)
我不确定我使用的计算平台的问题,还是处理数据或编码的方式。
请您解决这个问题吗?
谢谢你, 艾萨克
答案 0 :(得分:2)
interp1d中的样条插值使用完整矩阵。更好地使用splev / splrep组合,UnivariateSpline或CubicSpline(将来可用于scipy版本)。
编辑:从scipy 0.19.0及更高版本开始,此答案已过时,其中interp1d
不再使用完整矩阵。