Interpolación SciPy

¿Qué es la interpolación?

En el campo del análisis numérico de las matemáticas, la interpolación (en inglés: interpolation) es un proceso o método para inferir nuevos puntos de datos dentro de un rango a partir de puntos de datos discretos conocidos.

En términos simples, la interpolación es un método para generar puntos entre puntos dados.

Por ejemplo:Para dos puntos 1 y 2, podemos interpolar y encontrar los puntos 1.33 y 1.66.

La interpolación tiene muchos usos; en el aprendizaje automático a menudo tratamos con datos faltantes, y la interpolación suele usarse para reemplazar esos valores.

Este método de completar valores se llama imputación.

Además de la imputación, la interpolación se usa frecuentemente donde necesitamos suavizar puntos discretos en un conjunto de datos.

¿Cómo implementar la interpolación en SciPy?

SciPy proporciona el módulo scipy.interpolate para manejar la interpolación.

Interpolación unidimensional

La interpolación de datos unidimensionales se puede mediante el métodointerp1d()completar.

Este método recibe dos parámetros: los puntos x y los puntos y.

El valor de retorno es una función invocable que puede llamarse con una nueva x y devuelve la y correspondiente,y = f(x)。

interpolando para los xs e ys dados, desde 2.1, 2.2... hasta 2.9:

Ejemplo

from scipy.interpolate import interp1d
import numpy as np

xs = np.arange(10)
ys = 2*xs + 1

interp_func = interp1d(xs, ys)

newarr = interp_func(np.arange(2.1, 3, 0.1))

print(newarr)

El resultado de salida es:

[5.2  5.4  5.6  5.8  6.   6.2  6.4  6.6  6.8]

Nota:Los nuevos xs deben estar en el mismo rango que los viejos xs, lo que significa que no podemos llamar a interp_func() con valores mayores que 10 o menores que 0.

Interpolación univariable

En la interpolación unidimensional, los puntos se ajustan a una sola curva, mientras que en la interpolación con splines, los puntos se ajustan a una función definida por tramos mediante polinomios.

La interpolación univariable utiliza la función UnivariateSpline(), que acepta xs e ys y genera una función invocable que puede llamarse con nuevos xs.

Una función definida por tramos es una función que tiene diferentes expresiones analíticas para diferentes rangos de valores de la variable independiente x.

Encuentre la interpolación por splines univariable para los puntos no lineales 2.1, 2.2...2.9:

Ejemplo

from scipy.interpolate import UnivariateSpline
import numpy as np

xs = np.arange(10)
ys = xs**2 + np.sin(xs) + 1

interp_func = UnivariateSpline(xs, ys)

newarr = interp_func(np.arange(2.1, 3, 0.1))

print(newarr)

El resultado de salida es:

[5.62826474 6.03987348 6.47131994 6.92265019 7.3939103  7.88514634
   8.39640439 8.92773053 9.47917082]

Interpolación por funciones de base radial

Una función de base radial es una función definida en correspondencia con un punto de referencia fijo.

En la interpolación de superficies, generalmente usamos la interpolación por funciones de base radial.

La función Rbf() acepta xs e ys como parámetros y genera una función invocable que puede llamarse con nuevos xs.

Ejemplo

from scipy.interpolate import Rbf
import numpy as np

xs = np.arange(10)
ys = xs**2 + np.sin(xs) + 1

interp_func = Rbf(xs, ys)

newarr = interp_func(np.arange(2.1, 3, 0.1))

print(newarr)

El resultado de salida es:

  [6.25748981  6.62190817  7.00310702  7.40121814  7.8161443   8.24773402
   8.69590519  9.16070828  9.64233874]
Otras extensiones