Convert 3-D matrix to a table

23 visualizaciones (últimos 30 días)
Konstantinos Tsitsilonis
Konstantinos Tsitsilonis el 11 de Sept. de 2017
Comentada: Konstantinos Tsitsilonis el 11 de Sept. de 2017
Hi all,
I have an output from a for loop which is a 3-D matrix. I would like to place the contents of that 3-D matrix in a table such that if my 3-D matrix is
Mat = rand(5, 10, 4) ;
My table can look like this:
Var1 = reshape(Mat(:,1,:), [], 2) ; %Table Variables extracted and converted to 2-D matrices
Var2 = reshape(Mat(:,2,:), [], 2) ;
etc....
T = table(Var1, Var2 ... etc)
This way, under each variable there are going to be four columns.
Is there an 'automated' way to perform the above, as depending on the problem I am going to be dealing with anywhere from 2-4 'layers' on the 3rd dimension of the matrix Mat ?
Thanks for your responses in advance,
KMT.

Respuesta aceptada

Guillaume
Guillaume el 11 de Sept. de 2017
If you want 4 columns, then your reshape is wrong. You probably meant:
Var1 = reshape(Mat(:, 1, :), [], 4);
%...
If I understood correctly you want a table with 5 rows, 10 variables, where each variable has 4 columns. reshape is the wrong tool for that. permute is the right tool.
mat = randi([0 20], 5, 10, 4);
splitmat = num2cell(permute(mat, [1 3 2]), [1 2]); %move 3rd dimension as column, then split into cell array keeping rows and columns together
T = table(splitmat{:})

Más respuestas (0)

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by