Source code for africanus.gps.kernels

# -*- coding: utf-8 -*-


import numpy as np
from africanus.gps.utils import abs_diff


[docs]def exponential_squared(x, xp, sigmaf, l, pspec=False): # noqa: E741 """ Create exponential squared covariance function between :math:`D` dimensional vectors :math:`x` and :math:`x_p` i.e. .. math:: k(x, x_p) = \\sigma_f^2 \\exp\\left(-\\frac{(x-x_p)^2}{2l^2}\\right) Parameters ---------- x : :class:`numpy.ndarray` Array of shape :code:`(N, D)`. xp : :class:`numpy.ndarray` Array of shape :code:`(Np, D)`. sigmaf : float The signal variance hyper-parameter l : float The length scale hyper-parameter Returns ------- K : :class:`numpy.ndarray` Array of shape :code:`(N, Np)` """ if pspec: N, D = x.shape if D != 1: raise(NotImplementedError, "Only 1D pspecs supported") if (x != xp).any(): raise(ValueError, "pspec only defined if x = xp") x = x.squeeze() delx = x[1] - x[0] if (x[1::] - x[0:-1] != delx).any(): raise(ValueError, "pspec only defined on regular grid") s = np.fft.fftshift(np.fft.fftfreq(N, d=delx)) return np.sqrt(2*np.pi*l)*sigmaf**2.0*np.exp(-l**2*s**2/2.0) else: xxp = abs_diff(x, xp) return sigmaf**2*np.exp(-xxp**2/(2*l**2))