Source code for glimix_core.cov._sum

from numpy import add
from optimix import Function


[docs]class SumCov(Function): """ Sum of covariance functions, K = K₀ + K₁ + ⋯. Example ------- .. doctest:: >>> from glimix_core.cov import LinearCov, SumCov >>> from numpy.random import RandomState >>> >>> random = RandomState(0) >>> cov_left = LinearCov(random.randn(4, 20)) >>> cov_right = LinearCov(random.randn(4, 15)) >>> cov_left.scale = 0.5 >>> >>> cov = SumCov([cov_left, cov_right]) >>> cov_left.name = "A" >>> cov_right.name = "B" >>> cov.name = "A+B" >>> print(cov) SumCov(covariances=...): A+B LinearCov(): A scale: 0.5 LinearCov(): B scale: 1.0 """
[docs] def __init__(self, covariances): """ Constructor. Parameters ---------- covariances : list List of covariance functions. """ self._covariances = [c for c in covariances] Function.__init__(self, "SumCov", composite=self._covariances)
def value(self): r""" Sum of covariance matrices. Returns ------- K : ndarray K₀ + K₁ + ⋯ """ return add.reduce([cov.value() for cov in self._covariances]) def gradient(self): """ Sum of covariance function derivatives. Returns ------- dict ∂K₀ + ∂K₁ + ⋯ """ grad = {} for i, f in enumerate(self._covariances): for varname, g in f.gradient().items(): grad[f"{self._name}[{i}].{varname}"] = g return grad def __str__(self): tname = type(self).__name__ msg = "{}(covariances=...)".format(tname) if self.name is not None: msg += ": {}".format(self.name) for c in self._covariances: spl = str(c).split("\n") msg = msg + "\n" + "\n".join([" " + s for s in spl]) return msg