import numpy as np from scipy.interpolate import griddata def inpaint_nans_3d(array): # Get coordinates of non-nan values valid_mask = ~np.isnan(array) coords = np.array(np.nonzero(valid_mask)).T values = array[valid_mask] # Get coordinates of nan values nan_coords = np.array(np.nonzero(~valid_mask)).T # Interpolate filled_values = griddata(coords, values, nan_coords, method='linear') # Create output array and fill with interpolated values result = array.copy() result[~valid_mask] = filled_values return result