numpy_helpers.py 690 B

12345678910111213141516171819202122
  1. import numpy as np
  2. def deep_interp_np(x, xp, fp, axis=None):
  3. if axis is not None:
  4. fp = fp.swapaxes(0,axis)
  5. x = np.atleast_1d(x)
  6. xp = np.array(xp)
  7. if len(xp) < 2:
  8. return np.repeat(fp, len(x), axis=0)
  9. if min(np.diff(xp)) < 0:
  10. raise RuntimeError('Bad x array for interpolation')
  11. j = np.searchsorted(xp, x) - 1
  12. j = np.clip(j, 0, len(xp)-2)
  13. d = np.divide(x - xp[j], xp[j + 1] - xp[j], out=np.ones_like(x, dtype=np.float64), where=xp[j + 1] - xp[j] != 0)
  14. vals_interp = (fp[j].T*(1 - d)).T + (fp[j + 1].T*d).T
  15. if axis is not None:
  16. vals_interp = vals_interp.swapaxes(0,axis)
  17. if len(vals_interp) == 1:
  18. return vals_interp[0]
  19. else:
  20. return vals_interp