linop.Gradient

Contents

linop.Gradient#

bartorch.linop.Gradient()#

Finite differences along axes, stacked on a new leading axis.

BART’s linop_grad. The codomain is (len(axes), *shape): one difference per axis, side by side, which is the operator a total-variation term is built on.

The difference is the forward one and the boundary is circular: component i at the last index along its axis is the first entry minus the last, not zero. So the operator has a null space – a constant maps to zero – as a gradient does.

The components come out in ascending axis order, whatever order axes names them in. BART stacks them by bit position, and its bits run the opposite way to C-order axes, so this reverses that with BART’s own linop_flip rather than leaving the caller to discover that axes=(0, 1) puts axis 1 first.

Parameters:
  • shape (tuple of int) – The domain, C order.

  • axes (int or tuple of int) – Which axes to difference along. Order does not matter: BART takes a set of axes, and the result is ordered by axis either way.