O próprio numpy possui uma função chamada "interp" (vale a pena ver a documentação), mas minha preferência é pelo pacote "scipy" que possuiu diversas formas de interpolação, como no exemplo a seguir:
Primeiro importo numpy e scipy
import numpy as np
from scipy import interpolate
Crio agora os dados:
dados_x = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
dados_y = [10.0, 20.0, 30.0, 40.0, 50.0, 70.0, 90.0, 100.0, 200.0, 300.0]
Faço agora a interpolação:
interp = interpolate.interp1d(dados_x, dados_y)
tenha em mente que agora a variável interp contém um objeto que é capaz de fazer a interpolação
Por fim, passo para a interpolação novos dados:
new_x = np.arange(1, 10, 0.1)
new_y = interp(new_x)
Agora, a variável new_y contém um array numpy, como esse no caso do exemplo:
array([ 10., 11., 12., 13., 14., 15., 16., 17., 18.,
19., 20., 21., 22., 23., 24., 25., 26., 27.,
28., 29., 30., 31., 32., 33., 34., 35., 36.,
37., 38., 39., 40., 41., 42., 43., 44., 45.,
46., 47., 48., 49., 50., 52., 54., 56., 58.,
60., 62., 64., 66., 68., 70., 72., 74., 76.,
78., 80., 82., 84., 86., 88., 90., 91., 92.,
93., 94., 95., 96., 97., 98., 99., 100., 110.,
120., 130., 140., 150., 160., 170., 180., 190., 200.,
210., 220., 230., 240., 250., 260., 270., 280., 290.])
Ademais, caso precise interpolar valores em 1D, 2D, 3D, dê uma olhada nas docs:
Função no numpy:
https://docs.scipy.org/doc/numpy/reference/generated/numpy.interp.html
Função no scipy:
https://docs.scipy.org/doc/scipy-0.19.1/reference/generated/scipy.interpolate.interp1d.html
Todas as interpolações:
https://docs.scipy.org/doc/scipy-0.19.1/reference/interpolate.html
Espero ter ajudado,
Sucesso!