Source code for teneva.act_many

"""Package teneva, module act_many: operations with a set of TT-tensors.

This module contains the basic operations with a set of multiple TT-tensors
(Y1, Y2, ...), including "add_many" and "outer_many".

"""
import teneva


[docs]def add_many(Y_many, e=1.E-10, r=1.E+12, trunc_freq=15): """Compute Y1 + Y2 + ... + Ym in the TT-format. Args: Y_many (list): the list of TT-tensors (some of them may be int/float). e (float): desired approximation accuracy. The result will be truncated to this accuracy. r (int): maximum rank of the result. trunc_freq (int): frequency of intermediate summation result truncation. Returns: list: TT-tensor, which represents the element wise sum of all given tensors. If all the tensors are numbers, then result will be int/float. """ Y = teneva.copy(Y_many[0]) for i, Y_curr in enumerate(Y_many[1:]): Y = teneva.add(Y, Y_curr) if not teneva._is_num(Y) and (i+1) % trunc_freq == 0: Y = teneva.truncate(Y, e) return teneva.truncate(Y, e, r) if not teneva._is_num(Y) else Y
[docs]def outer_many(Y_many): """Compute outer product of given TT-tensors. Args: Y_many (list): list of TT-tensors. Returns: list: TT-tensor, which is the outer product of given TT-tensors. Note: See also "outer" function, which computes outer kronecker product of two given TT-tensors. """ if len(Y_many) == 0: return None Y = teneva.copy(Y_many[0]) for Y_curr in Y_many[1:]: Y.extend(teneva.copy(Y_curr)) return Y