Source code for pyproximal.proximal.HalfSpace
import numpy as np
from pylops.utils.typing import NDArray
from pyproximal.projection.HalfSpace import HalfSpaceProj
from pyproximal.ProxOperator import ProxOperator, _check_tau
[docs]class HalfSpace(ProxOperator):
r"""Half space proximal operator.
Proximal operator of the half space: :math:`\operatorname{H}_{[w, b]} =
\{ \mathbf{x}: \mathbf{w}^T \mathbf{x} \leq b \}`.
Parameters
----------
w : :obj:`numpy.ndarray`
Coefficients of the half space
b : :obj:`float`
bias of the half space
Notes
-----
As the half space is an indicator function, the proximal operator
corresponds to its orthogonal projection
(see :class:`pyproximal.projection.HalfSpaceProj` for details.
"""
def __init__(self, w: NDArray, b: float) -> None:
super().__init__(None, False)
self.w = w
self.b = b
self.half_space = HalfSpaceProj(self.w, self.b)
def __call__(self, x: NDArray) -> bool:
return bool(np.dot(self.w, x) <= self.b)
@_check_tau
def prox(self, x: NDArray, tau: float) -> NDArray:
return self.half_space(x)