pylops.signalprocessing.Shift(dims, shift, axis=-1, nfft=None, sampling=1.0, real=False, engine='numpy', dtype='complex128', name='S', **kwargs_fftw)[source]#

Shift operator

Apply fractional shift in the frequency domain along an axis of a multi-dimensional array of size dims.


Number of samples for each dimension

shiftfloat or numpy.ndarray

Fractional shift to apply in the same unit as sampling. For multi-dimensional inputs, this can be a scalar to apply to every trace along the chosen axis or an array of shifts to be applied to each trace.

axisint, optional

New in version 2.0.0.

Axis along which shift is applied

nfftint, optional

Number of samples in Fourier Transform (same as input if nfft=None)

samplingfloat, optional

Sampling step \(\Delta t\).

realbool, optional

Model to which fft is applied has real numbers (True) or not (False). Used to enforce that the output of adjoint of a real model is real.

enginestr, optional

Engine used for fft computation (numpy, scipy, or fftw). Choose numpy when working with CuPy arrays.

dtypestr, optional

Type of elements in input array.

namestr, optional

New in version 2.0.0.

Name of operator (to be used by pylops.utils.describe.describe)


Arbitrary keyword arguments for pyfftw.FTTW


If dims is provided and axis is bigger than len(dims)


If engine is neither numpy, scipy, nor fftw


The Shift operator applies the forward Fourier transform, an element-wise complex scaling, and inverse fourier transform

\[\mathbf{y}= \mathbf{F}^{-1} \mathbf{S} \mathbf{F} \mathbf{x}\]

Here \(\mathbf{S}\) is a diagonal operator that scales the Fourier transformed input by \(e^{-j2\pi f t_S}\), where \(t_S\) is the chosen shift.


Operator shape


Operator contains a matrix that can be solved explicitly (True) or not (False)

Examples using pylops.signalprocessing.Shift#