MATLAB: Decompose an N-dimensional array into outer products

array decompositions

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

Best Answer

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.