pyproximal.Orthogonal

class pyproximal.Orthogonal(f: ProxOperator, Q: LinearOperator, partial: bool = False, b: ndarray[tuple[Any, ...], dtype[_ScalarT]] | None = None, alpha: float = 1.0)[source]

Proximal operator of any function of the product between an orthogonal matrix and a vector (plus summation of a vector).

Proximal operator of any quadratic function \(g(\mathbf{x})=f(\mathbf{Qx} + \mathbf{b})\) where \(\mathbf{Q}\) is an orthogonal operator and \(\mathbf{b}\) is a vector in the data space of \(\mathbf{Q}\).

Parameters:
fpyproximal.ProxOperator

Proximal operator

Qpylops.LinearOperator

Orthogonal operator

partialbool, optional

Partial (True) of full (False) orthogonality

bnumpy.ndarray, optional

Vector

alphafloat, optional

Positive coefficient for partial orthogonality. It will be ignored if partial=False

Notes

The Proximal operator of any function of the form \(g(\mathbf{x}) = f(\mathbf{Qx} + \mathbf{b})\) with the operator \(\mathbf{Q}\) satisfying the following condition \(\mathbf{Q}\mathbf{Q}^T = \alpha \mathbf{I}\) (partial orthogonality) is [1]:

\[\prox_{\tau g}(x) = \frac{1}{\alpha} ((\alpha \mathbf{I} - \mathbf{Q}^H \mathbf{Q}) \mathbf{x} + \mathbf{Q}^H (\prox_{\alpha \tau f}(\mathbf{Qx} + \mathbf{b}) - \mathbf{b}))\]

A special case arises when \(\mathbf{Q}\mathbf{Q}^T = \mathbf{Q}^T\mathbf{Q} = \mathbf{I}\) (full orthogonality), and the proximal operator reduces to:

\[\prox_{\tau g}(x) = \mathbf{Q}^H (\prox_{\tau f}(\mathbf{Qx} + \mathbf{b}) - \mathbf{b}))\]
[1]

Daniel O’Connor, D., and Vandenberghe, L., “Primal-Dual Decomposition by Operator Splitting and Applications to Image Deblurring”, SIAM J. Imaging Sciences, vol. 7, pp. 1724–1754. 2014.

Methods

__init__(f, Q[, partial, b, alpha])

affine_addition(v)

Affine addition

chain(g)

Chain

grad(x)

Gradient of the Moreau envelope of the function.

postcomposition(sigma)

Postcomposition

precomposition(a, b)

Precomposition

prox(**kwargs)

proxdual(**kwargs)

Examples using pyproximal.Orthogonal

Deblending

Deblending