spyrit.core.meas.HadamSplit2d.adjoint

HadamSplit2d.adjoint(y: tensor, unvectorize=False)

Apply adjoint of matrix A.

It computes

\[x = A^Ty,\]

where \(A \in \mathbb{R}^{2M\times N}\) is the acquisition matrix (that may contain negative values) and \(y \in \mathbb{R}^{2M}\) is a measurement vector.

Note

The acquisition matrix \(A\) is given by self.A.

Args:

y (torch.tensor): Measurement \(y\) whose dimensions self.meas_dims must have shape self.meas_shape.

Returns:

torch.tensor: A batch of signals \(x\) with shape \((*, N)\) where \(*\) is the same as for m.

Examples:

Example 1: (3, 4) measurements of length 20 are measured with an acquisition matrix of shape (10, 15). This produces (3, 4) signals of length 15.

>>> import spyrit.core.meas as meas
>>> H = torch.randn(10, 15)
>>> meas_op = meas.LinearSplit(H)
>>> y = torch.randn(3, 4, 20)
>>> x = meas_op.adjoint(y)
>>> print(x.shape)
torch.Size([3, 4, 15])

Example 2: 3 measurements of length 20 are measured with an acquisition matrix of shape (10, 60). This produces 3 signals of length 60.

>>> import spyrit.core.meas as meas
>>> H = torch.randn(10, 60)
>>> meas_op = meas.LinearSplit(H, meas_shape=(15, 4))
>>> m = torch.randn(3, 20)
>>> x = meas_op.adjoint(m)
>>> print(x.shape)
torch.Size([3, 60])