Source code for monalisa.optim._back_gradient_n_t
"""Port of src/optim/bmBackGradient_nT.m."""
import numpy as np
from monalisa._mat import mixed, vec
[docs]
def back_gradient_n_t(x, n_u, dX_u, n):
"""Adjoint of ``back_gradient_n``."""
n_u = vec(n_u).astype(np.int64)
dX_u = vec(dX_u)
shape = tuple(n_u) if n_u.size > 1 else (int(n_u[0]), 1)
x = np.reshape(np.asarray(x), shape, order="F")
ax = int(n) - 1
g = x.copy()
idx = [slice(None)] * g.ndim
idx[ax] = 0
g[tuple(idx)] = 0
g = mixed(np.divide, g - np.roll(x, -1, axis=ax), dX_u[ax])
return np.reshape(g, (-1, 1), order="F")