Error: rango 3 en la hora significa que solo sobreviven tres horas
«Tucker con rango 3 en la hora conserva tres de las 24 horas y descarta el resto.»
T = rng.random((24, 40))
U, s, Vt = np.linalg.svd(T, full_matrices=False)
U3 = U[:, :3]
assert U3.shape == (24, 3)
recon = U3 @ np.diag(s[:3]) @ Vt[:3]
assert recon.shape == (24, 40)
assert len(np.unique(recon.round(6), axis=0)) == 24
La base de la hora tiene una fila por hora real y una columna por dirección aprendida: U3 es (24, 3), y los 24 perfiles horarios reconstruidos siguen siendo distintos.
El rango 3 compra tres direcciones para describir la variación a lo largo de las 24 horas. Un rango es un presupuesto, no un subconjunto.