t3toolbox.OLD_uniform.unpack#
- t3toolbox.OLD_uniform.unpack(packed_edge_tensors: NDArray, submask: NDArray, use_jax: bool = False) Tuple[NDArray, Ellipsis]#
Get ragged (variable length) edge vectors from uniform edge vectors.
Example
>>> import numpy as np >>> import t3toolbox.uniform_tucker_tensor_train as ut3 >>> E = np.array([[1,2,3,4],[5,6,7,8]]) >>> submask = [[True, False, True, True],[False, True, False, False]] >>> print(ut3.unpack(E, submask)) (array([1, 3, 4]), array([6]))
Get a tensor from each “edge”:
>>> import numpy as np >>> import t3toolbox.uniform_tucker_tensor_train as ut3 >>> E = np.random.randn(6,5,4,3,2) >>> submask = [[False, False],[False, True], [True, True]] >>> ee = ut3.unpack(E, submask) >>> print([e.shape for e in ee]) [(6, 5, 4, 0), (6, 5, 4, 1), (6, 5, 4, 2)]
Practical use case: remove zero singular values from uniform T3-SVD
>>> import numpy as np >>> import t3toolbox.tucker_tensor_train as t3 >>> import t3toolbox.uniform_tucker_tensor_train as ut3 >>> import t3toolbox.t3svd as t3svd >>> s0 = ((11,12,13), (6,7,5), (1,3,6,2)) >>> s = (s0[0],) + t3.compute_minimal_t3_ranks(s0) >>> x = t3.t3_corewise_randn(s) >>> _, _, ss_tt = t3svd.t3svd(x) >>> print(ss_tt[1]) [2627.79225375 441.12769204 328.73617961] >>> cores, masks = ut3.t3_to_ut3(x) >>> _, _, ss_tt_from_ut3 = ut3.ut3_svd(cores, masks) >>> print(ss_tt_from_ut3[1]) [2627.79225375 441.12769204 328.73617961 0. 0. ] >>> print(ut3.unpack(ss_tt_from_ut3, masks[2])[1]) [2627.79225375 441.12769204 328.73617961]