NuclearNorm

class odl.solvers.functional.default_functionals.NuclearNorm(*args, **kwargs)[source]

Bases: odl.solvers.functional.functional.Functional

Nuclear norm for matrix valued functions.

Notes

For a matrix-valued function f : \Omega \rightarrow \mathbb{R}^{n \times m}, the nuclear norm with parameters p and q is defined by

\left( \int_\Omega \|\sigma(f(x))\|_p^q d x \right)^{1/q},

where \sigma(f(x)) is the vector of singular values of the matrix f(x) and \| \cdot \|_p is the usual p-norm on \mathbb{R}^{\min(n, m)}.

For a detailed description of its properties, e.g, its proximal, convex conjugate and more, see [Du+2016].

References

[Du+2016] J. Duran, M. Moeller, C. Sbert, and D. Cremers. Collaborative Total Variation: A General Framework for Vectorial TV Models SIAM Journal of Imaging Sciences 9(1): 116–151, 2016.

Attributes
adjoint

Adjoint of this operator (abstract).

convex_conj

Convex conjugate of the nuclear norm.

domain

Set of objects on which this operator can be evaluated.

grad_lipschitz

Lipschitz constant for the gradient of the functional.

gradient

Gradient operator of the functional.

inverse

Return the operator inverse.

is_functional

True if this operator’s range is a Field.

is_linear

True if this operator is linear.

proximal

Return the proximal operator.

range

Set in which the result of an evaluation of this operator lies.

Methods

_call(self, x)

Return self(x).

bregman(self, point, subgrad)

Return the Bregman distance functional.

derivative(self, point)

Return the derivative operator in the given point.

norm(self[, estimate])

Return the operator norm of this operator.

translated(self, shift)

Return a translation of the functional.

__init__(self, space, outer_exp=1, singular_vector_exp=2)[source]

Initialize a new instance.

Parameters
spaceProductSpace of ProductSpace of TensorSpace

Domain of the functional.

outer_exp{1, 2, inf}, optional

Exponent for the outer norm.

singular_vector_exp{1, 2, inf}, optional

Exponent for the norm for the singular vectors.

Examples

Simple example, nuclear norm of matrix valued function with all ones in 3 points. The singular values are [2, 0], which has squared 2-norm 2. Since there are 3 points, the expected total value is 6.

>>> r3 = odl.rn(3)
>>> space = odl.ProductSpace(odl.ProductSpace(r3, 2), 2)
>>> norm = NuclearNorm(space)
>>> norm(space.one())
6.0