This post was inspired by a question from John Johnson.
Have you ever wanted to plot a model spectrum at lower resolution? Or compare a model spectrum with an observed spectrum? Have you ever wanted to shift several observed spectra to a common redshift to stack them up? In all these cases, you would need to resample the spectrum. Just such a scenario arose and I was asked:
What is the recommended way to resample a 1D spectrum?
I recalled using pysynphot, which is very useful for working with 1D spectra. However, the documentation is still a bit thin. After a bit of of exploring, here is an example that John Johnson and I wrote to illustrate our answer to the question. This package takes care to resample while preserving flux. We hope you find this useful! Or leave your alternative answer in the comments below.
from pysynphot import observation from pysynphot import spectrum def rebin_spec(wave, specin, wavnew): spec = spectrum.ArraySourceSpectrum(wave=wave, flux=specin) f = np.ones(len(wave)) filt = spectrum.ArraySpectralElement(wave, f, waveunits='angstrom') obs = observation.Observation(spec, filt, binset=wavnew, force='taper') return obs.binflux