Source code for teneva.props

"""Package teneva, module props: various properties of TT-tensors.

This module contains the basic properties of TT-tensors, including "erank",
"ranks", "shape", etc.

"""
import numpy as np


[docs]def erank(Y): """Compute effective TT-rank of the given TT-tensor. Effective TT-rank r of a TT-tensor Y with shape [n_1, n_2, ..., n_d] and TT-ranks r_0, r_1, ..., r_d (r_0 = r_d = 1) is a solution of equation n_1 r + sum_{alpha=2}^{d-1} n_alpha r^2 + n_d r = sum_{alpha=1}^{d} n_alpha r_{alpha-1} r_{alpha}. The representation with a constant TT-rank r (r_0 = 1, r_1 = r_2 = ... = r_{d-1} = r, r_d = 1) yields the same total number of parameters as in the original decomposition of the tensor Y. Args: Y (list): TT-tensor. Returns: float: effective TT-rank. """ d, n, r = len(Y), shape(Y), ranks(Y) if d == 2: return r[1] sz = np.dot(n * r[0:d], r[1:]) b = r[0] * n[0] + n[d-1] * r[d] a = np.sum(n[1:d-1]) return (np.sqrt(b * b + 4 * a * sz) - b) / (2 * a)
[docs]def ranks(Y): """Return the TT-ranks of the given TT-tensor. Args: Y (list): TT-tensor. Returns: np.ndarray: TT-ranks in form of the 1D array of ints of the length d+1, where d is a number of tensor dimensions (the first and last elements are equal 1). """ return np.array([1] + [G.shape[2] for G in Y], dtype=int)
[docs]def shape(Y): """Return the shape of the given TT-tensor. Args: Y (list): TT-tensor. Returns: np.ndarray: shape of the tensor in form of the 1D array of ints of the length d, where d is a number of tensor dimensions. """ return np.array([G.shape[1] for G in Y], dtype=int)
[docs]def size(Y): """Return the size (number of parameters) of the given TT-tensor. Args: Y (list): TT-tensor. Returns: int: total number of parameters in the TT-representation (it is a sum of sizes of all TT-cores). """ return np.sum([G.size for G in Y])