smoothinterp#
- smoothinterp(newx=None, origx=None, origy=None, smoothness=None, growth=None, ensurefinite=True, keepends=True, method='linear')[source]#
Smoothly interpolate over values
Unlike
np.interp()
, this function does exactly pass through each data point:- Parameters:
newx (arr) – the points at which to interpolate
origx (arr) – the original x coordinates
origy (arr) – the original y coordinates
smoothness (float) – how much to smooth
growth (float) – the growth rate to apply past the ends of the data
ensurefinite (bool) – ensure all values are finite (including skipping NaNs)
method (str) – the type of interpolation to use (options are ‘linear’ or ‘nearest’)
- Returns:
the new y coordinates
- Return type:
newy (arr)
Example:
import sciris as sc import numpy as np from scipy import interpolate origy = np.array([0,0.2,0.1,0.9,0.7,0.8,0.95,1]) origx = np.linspace(0,1,len(origy)) newx = np.linspace(0,1,5*len(origy)) sc_y = sc.smoothinterp(newx, origx, origy, smoothness=5) np_y = np.interp(newx, origx, origy) si_y = interpolate.interp1d(origx, origy, 'cubic')(newx) kw = dict(lw=3, alpha=0.7) plt.plot(newx, np_y, '--', label='NumPy', **kw) plt.plot(newx, si_y, ':', label='SciPy', **kw) plt.plot(newx, sc_y, '-', label='Sciris', **kw) plt.scatter(origx, origy, s=50, c='k', label='Data') plt.legend() plt.show()
New in verison 3.0.0: “ensurefinite” now defaults to True; removed “skipnans” argument