Producto Khatri–Rao
Producto Khatri–Rao ⊙ — el producto de Kronecker columna a columna.
P es (I, R) y Q es (J, R); P ⊙ Q es (I·J, R), y la columna r es el producto exterior de P[:, r] y Q[:, r], aplanado:
def khatri_rao(P, Q):
return (P[:, None, :] * Q[None, :, :]).reshape(-1, P.shape[1])
Es lo que convierte la ecuación tensorial en la ecuación matricial que una pseudoinversa puede resolver. Y el atajo (BᵀB) * (CᵀC) — elemento a elemento, R × R — da (B ⊙ C)ᵀ(B ⊙ C) sin formar directamente la matriz de Gram de la matriz alta, y por eso el coste no se dispara.