T3Frame.unstack#
- t3toolbox.frame_variations_format.T3Frame.unstack()#
def unstack(self):
Unstack into an array-like tree.
Examples
>>> import numpy as np >>> import t3toolbox.frame_variations_format as bvf >>> import t3toolbox.corewise as cw >>> np.random.seed(0) >>> rnd = lambda x: np.random.randn(*x) >>> ss = (2, 3) # stack C: unstack splits these leading axes >>> up_tucker_cores = (rnd(ss+(10, 14)), rnd(ss+(11, 15)), rnd(ss+(12, 16))) >>> down_tt_cores = (rnd(ss+(1, 9, 4)), rnd(ss+(2, 8, 5)), rnd(ss+(3, 7, 1))) >>> left_tt_cores = (rnd(ss+(1, 10, 2)), rnd(ss+(2, 11, 3)), rnd(ss+(3, 12, 5))) >>> right_tt_cores = (rnd(ss+(2, 10, 4)), rnd(ss+(4, 11, 5)), rnd(ss+(5, 12, 1))) >>> frame = bvf.T3Frame(up_tucker_cores, down_tt_cores, left_tt_cores, right_tt_cores) >>> S = frame.unstack() >>> print(len(S), len(S[0])) # nested tree shaped like the stack (2, 3) 2 3 >>> ii, jj = 1, 2 # the [ii][jj] leaf is just the cores sliced at [ii, jj] >>> Sij = S[ii][jj] >>> sliced = bvf.T3Frame( ... tuple(c[ii, jj] for c in up_tucker_cores), tuple(c[ii, jj] for c in down_tt_cores), ... tuple(c[ii, jj] for c in left_tt_cores), tuple(c[ii, jj] for c in right_tt_cores)) >>> print(np.allclose(cw.corewise_norm(cw.corewise_sub(Sij.data, sliced.data)), 0.0)) True