Decompose an N-dimensional array into outer products
6 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Matt J
le 16 Jan 2019
Commenté : Christine Tobler
le 21 Jan 2019
The SVD gives us a way to decompose a square matrix A into a sum of outer products with a minimal number of terms. In other words, given
[U,S,V]=svd(A);
V=S*V;
I can reconstruct A as follows,
A=0;
for i=1:length(A)
A=A+U(:,i)*V(i,:);
end
My quesion is, is there an analog of this decomposition in N-dimensions. For a 3D array, for example, can we find a minimal decomposition into triple outer products,
A=0;
for i=1:?
A=A+U(:,i)*V(i,:)*reshape( W(:,i) 1,1,[] );
end
0 commentaires
Réponse acceptée
Christine Tobler
le 17 Jan 2019
Your last formula corresponds to the CP (canonical-polyadic) tensor decomposition. This is in a way the equivalent of the SVD for matrices, but its numerical properties aren't as nice: There is no direct way to compute it, and iterative methods often have a tendency to get stuck in local minima.
Another generalization of the SVD to tensors is the HOSVD (higher-order SVD), which consists of orthogonal matrices U, V, and W, and a core tensor K. This tensor is not diagonal like the matrix S in the SVD, but all the slices K(:, :, i) have decreasing Frobenius norm (same for K(:, i, :) and K(i, :, :)). This can be computed directly by applying the SVD to reshaped versions of the input tensor.
2 commentaires
Christine Tobler
le 21 Jan 2019
No stock commands in MATLAB, no. There are several MATLAB toolboxes (not written by MathWorks) available online, for example:
I have used the Tensor Toolbox several years ago, but haven't tried Tensorlab myself. Both provide methods for computing the two decompositions I mentioned above.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Linear Algebra dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!