Source code for pyproximal.proximal.AffineSet
import numpy as np
from pyproximal.ProxOperator import _check_tau
from pyproximal import ProxOperator
from pyproximal.projection import AffineSetProj
[docs]class AffineSet(ProxOperator):
r"""Affine set proximal operator.
Proximal operator of an Affine set: :math:`\{ \mathbf{x} : \mathbf{Opx}=\mathbf{b} \}`.
Parameters
----------
Op : :obj:`pylops.LinearOperator`
Linear operator
b : :obj:`numpy.ndarray`
Data vector
niter : :obj:`int`
Number of iterations of iterative scheme used to compute the projection.
Notes
-----
As the Affine set is an indicator function, the proximal operator corresponds to
its orthogonal projection (see :class:`pyproximal.projection.AffineSetProj` for
details.
"""
def __init__(self, Op, b, niter):
super().__init__(Op, False)
self.b = b
self.niter = niter
self.affine = AffineSetProj(self.Op, self.b, self.niter)
def __call__(self, x):
if np.allclose(self.Op.matvec(x), self.b):
return True
else:
return False
@_check_tau
def prox(self, x, tau):
return self.affine(x)