scipy.interpolate é útil para a montagem de uma função a partir de dados experimentais e, portanto, avaliar os pontos onde não existe nenhuma medida. O módulo é baseado nas subrotinas Fortran FitPack do projecto netlib.

Ao imaginar dados experimentais perto de uma função seno:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

measured_time = np.linspace(0, 1, 10)
noise = (np.random.random(10)*2 - 1) * 1e-1
measures = np.sin(2 * np.pi * measured_time) + noise

[/pastacode]

A classe scipy.interpolate.interp1d pode construir uma função de interpolação linear:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

from scipy.interpolate import interp1d
linear_interp = interp1d(measured_time, measures)

[/pastacode]

Em seguida, o exemplo scipy.interpolate.linear_interp precisa ser avaliada no instante de interesse:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

computed_time = np.linspace(0, 1, 50)
linear_results = linear_interp(computed_time)

[/pastacode]

Uma interpolação cúbica também pode ser selecionada através da palavra-chave argumento kind opcional:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

ubic_interp = interp1d(measured_time, measures, kind='cubic')
cubic_results = cubic_interp(computed_time)

[/pastacode]

Os resultados estão agora reunidos na seguinte figura Matplotlib:

[pastacode lang=”python” message=”” highlight=”” provider=”manual”]

import numpy as np
from scipy.interpolate import interp1d
import pylab as pl

measured_time = np.linspace(0, 1, 10)
noise = (np.random.random(10)*2 - 1) * 1e-1
measures = np.sin(2 * np.pi * measured_time) + noise

linear_interp = interp1d(measured_time, measures)
computed_time = np.linspace(0, 1, 50)
linear_results = linear_interp(computed_time)
cubic_interp = interp1d(measured_time, measures, kind='cubic')
cubic_results = cubic_interp(computed_time)

pl.plot(measured_time, measures, 'o', ms=6, label=u'Medições')
pl.plot(computed_time, linear_results, label=u'Interpolação Linear')
pl.plot(computed_time, cubic_results, label=u'Interpolação Cúbica')
pl.legend()

[/pastacode]

interpolacoesscipy.interpolate.interp2d é semelhante ao scipy.interpolate.interp1d, mas para matrizes de 2-D. Note que para a família interp, o tempo computado deve ficar dentro do intervalo de tempo medido.