Decompose an N-dimensional array into outer products
조회 수: 19 (최근 30일)
이전 댓글 표시
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
채택된 답변
Christine Tobler
2019년 1월 17일
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
Christine Tobler
2019년 1월 21일
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.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Eigenvalues에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!