pyproximal.utils.bilinear.LowRankFactorizedMatrix#
- class pyproximal.utils.bilinear.LowRankFactorizedMatrix(X: ndarray[tuple[Any, ...], dtype[_ScalarT]], Y: ndarray[tuple[Any, ...], dtype[_ScalarT]], d: ndarray[tuple[Any, ...], dtype[_ScalarT]], Op: Optional[LinearOperator] = None)[source]#
Low-Rank Factorized Matrix operator.
Bilinear operator representing the L2 norm of a Low-Rank Factorized Matrix defined as: \(H(\mathbf{X}, \mathbf{Y}) = \frac{1}{2} \|\mathbf{Op}(\mathbf{X}\mathbf{Y}) - \mathbf{d}\|_2^2\), where \(\mathbf{X}\) is a matrix of size \(n \times k\), \(\mathbf{Y}\) is a matrix of size \(k \times m\), and \(\mathbf{Op}\) is a linear operator of size \(p \times n\).
- Parameters
- X
numpy.ndarray Left-matrix of size \(n \times k\)
- Y
numpy.ndarray Right-matrix of size \(k \times m\)
- d
numpy.ndarray Data vector
- Op
pylops.LinearOperator, optional Linear operator
- X
Notes
The Low-Rank Factorized Matrix operator has gradient with respect to x equal to:
\[\nabla_x H(\mathbf{x};\ \mathbf{y}) = \mathbf{Op}^H(\mathbf{Op}(\mathbf{X}\mathbf{Y}) - \mathbf{d})\mathbf{Y}^H\]and gradient with respect to y equal to:
\[\nabla_y H(\mathbf{y}; \mathbf{x}) = \mathbf{X}^H \mathbf{Op}^H(\mathbf{Op} (\mathbf{X}\mathbf{Y}) - \mathbf{d})\]Note that in both cases, the currently stored \(\mathbf{x}\)/\(\mathbf{y}\) variable is used for the second variable within parenthesis (after ;).
Methods
__init__(X, Y, d[, Op])grad(x)gradx(x)Gradient of H wrt x
grady(y)Gradient of H wrt y
lx(x)ly(y)matvec(x)updatex(x)Update x variable (to be used to update the internal variable x)
updatexy(x_and_y)Update x and y variables (to be used to update both internal variables)
updatey(y)Update y variable (to be used to update the internal variable y)