Вот еще один вариант, если вы хотите использовать другую сплайн-функцию:
from matplotlib import pyplot
import numpy
from scipy import interpolate
widths = numpy.array([0, 30, 60, 90, 120, 150, 180])
heights = numpy.array([26, 38.5, 59.5, 82.5, 120.5, 182.5, 319.5])
xnew = numpy.linspace(widths.min(),widths.max(),300)
heights_smooth = interpolate.splrep(widths,heights) #Use splrep instead of spline
#Select desired width values
width_vals = [0, 80.5, 38.98743]
#splev returns the value of your spline evaluated at the width values.
heights = interpolate.splev(width_vals, heights_smooth)
Затем
In[]: heights
Out[]: array([ 26. , 74.1721985 , 44.47929453])
Или оценить в точке:
w = 167.2
heights = interpolate.splev(w, heights_smooth)
height = heights.item()
In[]: height
Out[]: 247.8396196684303
Функция .item()
необходима, потому что splev
возвращает array()