t3toolbox.backend.tucker_tensor_train.dense_t3svd.tucker_svd_dense#
- t3toolbox.backend.tucker_tensor_train.dense_t3svd.tucker_svd_dense(T: t3toolbox.backend.common.NDArray, min_ranks: t3toolbox.backend.common.typ.Sequence[int] = None, max_ranks: t3toolbox.backend.common.typ.Sequence[int] = None, rtol: float = None, atol: float = None, use_jax: bool = False) t3toolbox.backend.common.typ.Tuple[t3toolbox.backend.common.typ.Tuple[t3toolbox.backend.common.typ.Tuple[t3toolbox.backend.common.NDArray, Ellipsis], t3toolbox.backend.common.NDArray], t3toolbox.backend.common.typ.Tuple[t3toolbox.backend.common.NDArray, Ellipsis]]#
Compute Tucker decomposition and matricization singular values for dense tensor.
- Parameters:
T (NDArray) – The dense tensor. shape=(N1, …, Nd)
min_ranks (typ.Sequence[int]) – Minimum Tucker ranks for truncation. len=d
max_ranks (typ.Sequence[int]) – Maximum Tucker ranks for truncation. len=d
rtol (float) – Relative tolerance for truncation.
atol (float) – Absolute tolerance for truncation.
xnp – Linear algebra backend. Default: np (numpy)
- Returns:
typ.Tuple[typ.Tuple[NDArray,…],NDArray] – Tucker decomposition (tucker_bases, tucker_core). tucker_bases[ii].shape=(ni,Ni). tucker_core.shape=(n1,…,nd)
typ.Tuple[NDArray,…] – Singular values of matricizations
See also
truncated_svd,tt_svd_dense,t3_svd_dense,t3_svdExamples
>>> import numpy as np >>> import t3toolbox.common as common >>> import t3toolbox.t3svd as t3svd >>> T0 = np.random.randn(40, 50, 60) >>> c0 = 1.0 / np.arange(1, 41)**2 >>> c1 = 1.0 / np.arange(1, 51)**2 >>> c2 = 1.0 / np.arange(1, 61)**2 >>> T = np.einsum('ijk,i,j,k->ijk', T0, c0, c1, c2) # Preconditioned random tensor >>> (bases, backend), ss = t3svd.tucker_svd_dense(T, rtol=1e-3) # Truncate Tucker SVD to reduce rank >>> print(backend.shape) (9, 9, 9) >>> T2 = np.einsum('abc, ai,bj,ck->ijk', backend, bases[0], bases[1], bases[2]) >>> print(np.linalg.norm(T - T2) / np.linalg.norm(T)) # should be slightly more than rtol=1e-3 0.002418671417862558