Source code for pylops.basicoperators.Smoothing1D

import numpy as np

from pylops.signalprocessing import Convolve1D


[docs]def Smoothing1D(nsmooth, dims, dir=0, dtype="float64"): r"""1D Smoothing. Apply smoothing to model (and data) along a specific direction of a multi-dimensional array depending on the choice of ``dir``. Parameters ---------- nsmooth : :obj:`int` Lenght of smoothing operator (must be odd) dims : :obj:`tuple` or :obj:`int` Number of samples for each dimension dir : :obj:`int`, optional Direction along which smoothing is applied dtype : :obj:`str`, optional Type of elements in input array. Attributes ---------- shape : :obj:`tuple` Operator shape explicit : :obj:`bool` Operator contains a matrix that can be solved explicitly (``True``) or not (``False``) Notes ----- The Smoothing1D operator is a special type of convolutional operator that convolves the input model (or data) with a constant filter of size :math:`n_\text{smooth}`: .. math:: \mathbf{f} = [ 1/n_\text{smooth}, 1/n_\text{smooth}, ..., 1/n_\text{smooth} ] When applied to the first direction: .. math:: y[i,j,k] = 1/n_\text{smooth} \sum_{l=-(n_\text{smooth}-1)/2}^{(n_\text{smooth}-1)/2} x[l,j,k] Similarly when applied to the second direction: .. math:: y[i,j,k] = 1/n_\text{smooth} \sum_{l=-(n_\text{smooth}-1)/2}^{(n_\text{smooth}-1)/2} x[i,l,k] and the third direction: .. math:: y[i,j,k] = 1/n_\text{smooth} \sum_{l=-(n_\text{smooth}-1)/2}^{(n_\text{smooth}-1)/2} x[i,j,l] Note that since the filter is symmetrical, the *Smoothing1D* operator is self-adjoint. """ n = np.prod(np.array(dims)) if isinstance(dims, int): dims = None if nsmooth % 2 == 0: nsmooth += 1 return Convolve1D( n, np.ones(nsmooth) / float(nsmooth), dims=dims, dir=dir, offset=(nsmooth - 1) / 2, dtype=dtype, )