MATLAB: Do a cross-set operation on a matrix

cross-setMATLABmatrix

I have a matrix which looks as follows:
[1 2 3;
4 5 6]
I want to do a cross-set operation on itself, so that each element is associated with every other element, like this:
[1 2 3;
4 2 3;
1 5 3;
4 5 3;
1 2 6;
4 2 6;
1 5 6;
4 5 6]
Can someone please help me/point me in right direction?

Best Answer

A = [1 2 3; 4 5 6]; %data

[xx yy zz] = meshgrid(1:2,3:4,5:6); %column-wise linear indices

B = [A(xx(:)) A(yy(:)) A(zz(:))] %extract
More - generalized to n-dimensions and rows:
A = [1 2 3 7; 4 5 6 9]; %data
[nr nc] = size(A);
C = num2cell(reshape(1:(nr*nc),nr,nc),1);
X = cell(nc,1);
[X{1:nc}] = ndgrid(C{:}); %column-wise linear indices
for ii = nc:-1:1
V(:,ii) = A(reshape(X{ii},[],1));
end