Source code for mufasa.utils.interpolate


import numpy as np
from astropy.convolution import Gaussian2DKernel, convolve

[docs] def expand_interpolate(data, ker_sig=1): # data should be a 3D array kernel = Gaussian2DKernel(ker_sig) # large kernel size because regions outside the guesses are likely noisy data_smooth = data.copy() if data.ndim == 2: data_smooth = convolve(data, kernel, boundary='extend') qmask = np.isnan(data) data[qmask] = data_smooth[qmask] elif data.ndim == 3: for i, gsm in enumerate(data_smooth): data_smooth[i] = convolve(data[i], kernel, boundary='extend') qmask = np.isnan(data[i]) data[i][qmask] = data_smooth[i][qmask] return data
[docs] def iter_expand(data, mask): # expand the interpolation outwards, with increasingly larger kernals # until all pixels in the mask are filled def get_expand(data, mask): if data.ndim == 3: expand = np.sum(np.any(np.isnan(data), axis=0)[mask]) > 0 elif data.ndim == 2: expand = np.sum(np.isnan(data)[mask]) > 0 return expand expand = get_expand(data, mask) i = 0 while expand: data = expand_interpolate(data, ker_sig= 1 +i) expand = get_expand(data, mask) i = i+ 1 try: data[:, ~mask] = np.nan except IndexError: data[~mask] = np.nan return data