t3_apply_ambient_transpose#
- t3toolbox.backend.apply.t3_apply_ambient_transpose(c, ww, sum_over_probes=False)#
def t3_apply_ambient_transpose( c: NDArray, # residual, shape=W+C ww: typ.Sequence[NDArray], # apply vectors, len=d, elm_shape=W+(Ni,) sum_over_probes: bool = False, # True: W becomes the CP rank (ambient J^T r) ) -> typ.Sequence[NDArray]: # canonical (CP) factors. len=d, ith elm_shape=stack_shape+(R, Ni)
Ambient transpose of
t3_apply(): back-projectcinto CP factors.The ambient adjoint – the transpose of
applyas a linear map on the full tensor space (X -> ( <X, w0^W (x) ... (x) w_{d-1}^W> )_W). Frame-free; the back-projectionc * (w0 (x) ... (x) w_{d-1})is rank-1, whose natural representation is a canonical (CP) decomposition (applyconsumes one vector per mode; its adjoint emits one scaled vector per mode). This is distinct from the corewise transpose (gradient w.r.t. a base point’s cores) and the tangent transpose (Riemannian gradient) – seedocs/transposes.mdfor the full taxonomy.sum_over_probes=False(primary):Wis a passthrough stacking axis – aW (+ C)stack of rank-1 CP tensors (CP rankR=1).sum_over_probes=True:Wbecomes the CP rank – one rank-|W|CP tensorsum_W c_W * (w0^W (x) ...)(the ambientJ^T r). Cheap as CP (O(d |W| N), the shared rank index stays implicit); the|W|^2cost of a dense Tucker tensor train is incurred only if you convert witht3_conversions.t3_from_canonical.
Returns the CP
factors(cfolded into the first), in the layoutt3_conversions.t3_from_canonicalconsumes.