Source code for pyproximal.projection.Euclidean

import numpy as np
from pyproximal.projection import HyperPlaneBoxProj


[docs]class EuclideanBallProj(): r"""Euclidean ball projection. Parameters ---------- center : :obj:`np.ndarray` or :obj:`float` Center of the ball radius : :obj:`float` Radius Notes ----- Given an Euclidean ball defined as: .. math:: \operatorname{Eucl}_{[c, r]} = \{ \mathbf{x}: l ||\mathbf{x} - \mathbf{c}||_2 \leq r \} its orthogonal projection is: .. math:: P_{\operatorname{Eucl}_{[c, r]}} (\mathbf{x}) = \mathbf{c} + \frac{r} {max\{ ||\mathbf{x} - \mathbf{c}||_2^2, r\}}(\mathbf{x} - \mathbf{c}) Note the this is the proximal operator of the corresponding indicator function :math:`\mathcal{I}_{\operatorname{Eucl}_{[c, r]}}`. """ def __init__(self, center, radius): self.center = center self.radius = radius def __call__(self, x): x = self.center + \ self.radius / (max(np.linalg.norm(x - self.center), self.radius)) * (x - self.center) return x