pyproximal.utils.bilinear.LowRankFactorizedMatrix#
- class pyproximal.utils.bilinear.LowRankFactorizedMatrix(X, Y, d, Op=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 :math`mathbf{x}`/:math`mathbf{y}` variable is used for the second variable within parenthesis (after ;).
Methods
__init__(X, Y, d[, Op])grad(x)gradx(x)grady(y)lx(x)ly(y)matvec(x)updatex(x)Update x variable (to be used to update the internal variable x)
updatexy(x)updatey(y)Update y variable (to be used to update the internal variable y)