Source code for pyCP_APR.numpy_backend.ttv_tensor
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Python implementation of ttv utility with Numpy backend from the MATLAB Tensor Toolbox [1].
References
========================================
[1] General software, latest release: Brett W. Bader, Tamara G. Kolda and others, Tensor Toolbox for MATLAB, Version 3.2.1, www.tensortoolbox.org, April 5, 2021.\n
"""
from . permute_tensor import permute
from . tt_dimscheck import tt_dimscheck
import numpy as np
import copy
[docs]def ttv(X, vecs, dims=[]):
"""
Tensor times vector for KRUSKAL tensor M.
Parameters
----------
X : object
Dense tensor class. tensor.TENSOR.
vecs : array
coluumn vector.
Returns
-------
c : array
product of KRUSKAL tensor X with a (column) vector vecs.
"""
dims, vidx = tt_dimscheck(dims, X.Dimensions, len(vecs))
remdims = np.setdiff1d(np.arange(X.Dimensions), vidx)
if X.Dimensions > 0:
X = permute(X, [x for x in range(0, X.Dimensions)])
c = copy.deepcopy(X.data)
n = X.Dimensions
for ii in [x for x in reversed(range(0, X.Dimensions))]:
x = int(np.prod(X.Size[0:n - 1]))
y = X.Size[n - 1]
c = np.reshape(c, [x, y])
c = np.dot(c, vecs[str(ii)])
n -= 1
return c