PointwiseNorm
- class odl.PointwiseNorm(*args, **kwargs)
Bases:
PointwiseTensorFieldOperatorTake the point-wise norm of a vector field.
This operator computes the (weighted) p-norm in each point of a vector field, thus producing a scalar-valued function. It implements the formulas
||F(x)|| = [ sum_j( w_j * |F_j(x)|^p ) ]^(1/p)
for
pfinite and||F(x)|| = max_j( w_j * |F_j(x)| )
for
p = inf, whereFis a vector field. This implies that theOperator.domainis a power space of a discretized function space. For example, ifXis aDiscretizedSpacespace, thenProductSpace(X, d)is a valid domain for any positive integerd.- __init__(vfspace, exponent=None, weighting=None)[source]
Initialize a new instance.
Parameters
- vfspace
ProductSpace Space of vector fields on which the operator acts. It has to be a product space of identical spaces, i.e. a power space.
- exponentnon-zero float, optional
Exponent of the norm in each point. Values between 0 and 1 are currently not supported due to numerical instability. Default:
vfspace.exponent- weighting
array-likeor positive float, optional Weighting array or constant for the norm. If an array is given, its length must be equal to
len(domain), and all entries must be positive. By default, the weights are is taken fromdomain.weighting. Note that this excludes unusual weightings with custom inner product, norm or dist.
Examples
We make a tiny vector field space in 2D and create the standard point-wise norm operator on that space. The operator maps a vector field to a scalar function:
>>> spc = odl.uniform_discr([-1, -1], [1, 1], (1, 2)) >>> vfspace = odl.ProductSpace(spc, 2) >>> pw_norm = odl.PointwiseNorm(vfspace) >>> pw_norm.range == spc True
Now we can calculate the 2-norm in each point:
>>> x = vfspace.element([[[1, -4]], ... [[0, 3]]]) >>> print(pw_norm(x)) [[ 1., 5.]]
We can change the exponent either in the vector field space or in the operator directly:
>>> vfspace = odl.ProductSpace(spc, 2, exponent=1) >>> pw_norm = PointwiseNorm(vfspace) >>> print(pw_norm(x)) [[ 1., 7.]] >>> vfspace = odl.ProductSpace(spc, 2) >>> pw_norm = PointwiseNorm(vfspace, exponent=1) >>> print(pw_norm(x)) [[ 1., 7.]]
- vfspace