bartorch.linop.ComponentDiagonal

bartorch.linop.ComponentDiagonal#

class bartorch.linop.ComponentDiagonal(diag, shape)#

A diagonal on the real part and another on the imaginary part.

BART’s linop_rdiag, which is md_zrmul: the real part of the input is scaled by the real part of diag and the imaginary part by the imaginary part, each on its own. It is the operator for treating a complex array as two real channels – not a real-valued diagonal, which is what its BART name suggests and what Diagonal already is when given a real diagonal, adjoint included, since conjugating a real number does nothing.

So ComponentDiagonal(w) with a real w scales the real part by w and annihilates the imaginary part, and it takes w + 1j * w to scale both. If that is what you want, reach for Diagonal.

Scaling two components separately is linear over the reals and not over the complex numbers, as Conj and Real are: it is self-adjoint for a real inner product and does not pass a complex dot test on its own.

Parameters:
  • diag (tensor) – Its real part scales real parts and its imaginary part scales imaginary parts. Every axis is either the operator’s size along that axis or one, and the ones are broadcast.

  • shape (tuple of int) – The shape the operator works on, C order.

__init__(diag, shape)#

Methods

A(x, **kwargs)

A x, under deepinv's name.

A_adjoint(y, **kwargs)

A^H y, under deepinv's name, recorded for autograd.

A_adjoint_A(x, **kwargs)

A^H A x, under deepinv's name, recorded for autograd.

A_dagger(y, **kwargs)

The pseudo-inverse, under deepinv's name.

__init__(diag, shape)

adjoint(y[, out])

A^H y, without recording for autograd.

cogram()

A A^H as an operator.

conj()

conj(A): conjugate the input, apply, conjugate the output.

forward(x[, out])

A x, without recording for autograd.

gram()

A^H A as an operator.

normal(x[, out])

A^H A x.

opnorm()

The spectral norm, by BART's power iteration on A^H A.

pinv(y[, damp])

(A^H A + damp I)^-1 A^H y, the damped least-squares solution.

to_nonlinear()

The same operator as a NonlinearOperator.

Attributes

H

A^H, from BART's own adjoint constructor.

T

A^T, the adjoint without the conjugation, as conj(A).H.

codim_rank

How many axes the codomain has.

codim_shape

The codomain, under pyxu's name for it; the same as oshape.

codim_size

How many elements the codomain holds.

device

dim_rank

How many axes the domain has.

dim_shape

The domain, under pyxu's name for it; the same as ishape.

dim_size

How many elements the domain holds.

ishape

oshape