Discover MakerZone

MATLAB and Simulink resources for Arduino, LEGO, and Raspberry Pi

Learn more

Discover what MATLAB® can do for your career.

Opportunities for recent engineering grads.

Apply Today

How to transform a XYZ-Array into a XxY-Matrix with Z as values of each Mxy-Component and vice versa?

Asked by Emerson De Souza on 18 Nov 2012

Hi, I have a table XYZ with three columns (xyz) as below:

1	1	1
1	2	2
1	3	3
2	1	4
2	2	5
2	3	6
3	1	7
3	2	8
3	3	9

and I want to transform it into a Mxy-Matrix with Z as value for each Mxy pair as follows:

1	4	7
2	5	8
3	6	9

On the other hand I may have directly the Matrix Mxy and would like to obtain the XYZ-table.

I already tried mesh, meshgrid, ndgrid, surf and etc... as documented, but nothing worked as I wished. It is possible that I did not understand yet how to use this commands.

I wonder if someone could tell me how to write the command to convert:

1) Table XYZ to Matrix Mxy with Z as values of each Mxy-pair 2) Matrix Mxy to Table XYZ

I thank you in advance for your help



Emerson De Souza


1 Answer

Answer by Walter Roberson on 18 Nov 2012
Accepted answer
accumarray(XYZ(:,[2 1]), XYZ(:,3)]


Emerson De Souza on 18 Nov 2012

Thank you Walter, your suggestion works fine as below

xvector = 1:1:3;
yvector = 1:1:3;
numX = numel(xvector);  
numY = numel(yvector);
yvector = repmat(yvector(:),numX,1);
xvector = repmat(xvector   ,numY,1);
XY = [xvector(:) yvector];
M=accumarray(XYZ(:,[2 1]), XYZ(:,3));

Now, if M is given, how do I obtain XYZ?

Thank you in advance


Walter Roberson on 18 Nov 2012
[X,Y] = ind2sub(size(M), 1:numel(M));
XYZ = [X(:), Y(:), M(:)];
Emerson De Souza on 19 Nov 2012

Thank you Walter, your suggestions fixed my problem. Wish you a nice day


Walter Roberson

Contact us