cubico python numpy scipy interpolation

spline cubico python



Error de memoria spline cúbico (1)

Si observa el rastreo cuando ocurre el error, verá algo como:

--------------------------------------------------------------------------- MemoryError Traceback (most recent call last) <ipython-input-4-1e538e8d766e> in <module>() ----> 1 f2 = interp1d(x, y, kind=''cubic'') /home/warren/local_scipy/lib/python2.7/site-packages/scipy/interpolate/interpolate.py in __init__(self, x, y, kind, axis, copy, bounds_error, fill_value) 390 else: 391 minval = order + 1 --> 392 self._spline = splmake(x, y, order=order) 393 self._call = self.__class__._call_spline 394 /home/warren/local_scipy/lib/python2.7/site-packages/scipy/interpolate/interpolate.py in splmake(xk, yk, order, kind, conds) 1754 1755 # the constraint matrix -> 1756 B = _fitpack._bsplmat(order, xk) 1757 coefs = func(xk, yk, order, conds, B) 1758 return xk, coefs, order MemoryError:

La función que está fallando es scipy.interpolate._fitpack._bsplmat(order, xk) . Esta función crea una matriz bidimensional de flotantes de 64 bits con forma (len(xk), len(xk) + order - 1) . En tu caso, esto es más de 51 GB.

En lugar de interp1d , vea si InterpolatedUnivariateSpline funciona para usted. Por ejemplo,

import numpy as np from scipy.interpolate import InterpolatedUnivariateSpline x = np.linspace(0, 10, 80000) y = np.cos(-x**2/8.0) f2 = InterpolatedUnivariateSpline(x, y, k=3)

No consigo un error de memoria con esto.

En una computadora con 4 GB de memoria, esta simple interpolación conduce a un error de memoria:

(basado en: http://docs.scipy.org/doc/scipy/reference/tutorial/interpolate.html )

import numpy as np from scipy.interpolate import interp1d x = np.linspace(0, 10, 80000) y = np.cos(-x**2/8.0) f2 = interp1d(x, y, kind=''cubic'')

Pensé en cortar los datos en fragmentos, pero ¿hay alguna forma de que pueda realizar esta interpolación spline cúbica sin requerir tanta memoria? ¿Por qué incluso se mete en problemas?