Project DelphiTensors Workshop

HOSVD en tres pasos

La forma de calcular una descomposición de Tucker se llama HOSVD, y usa solo herramientas que ya tienes:

  1. Desplegar el tensor a lo largo de cada eje (Parte I).
  2. Ejecutar SVD sobre cada desplegado; conservar los componentes principales. Esas son las matrices de factores.
  3. Contraer el tensor original contra todas las matrices de factores para obtener el núcleo (sección 06).
Us = [np.linalg.svd(unfold(T, ax), full_matrices=False)[0] for ax in range(3)] r = (2, 2, 3) Us = [Us[i][:, :r[i]] for i in range(3)] core = np.einsum('ijk,ia,jb,kc->abc', T, Us[0], Us[1], Us[2]) recon = np.einsum('abc,ia,jb,kc->ijk', core, Us[0], Us[1], Us[2])