Extract 2D matrix from 3D matrix with different lengths.

1 visualización (últimos 30 días)
Megha
Megha el 25 de Oct. de 2018
Comentada: Megha el 25 de Oct. de 2018
I have 17x8x94059 class-double matrix. i.e 3D matrix., say "B"
Now I would like to extract 17x94059 elements and make it a 2D matix having a new variable name, say "A".
The command like
A = squeeze(B(:,1,:));
did not work.
Moreover I want to extract all 8-values from 17x8x94059 matrix in a similar way.
such that I can make a loop something like,
for i = 1:8
A = squeeze(B(:,i,:))
end
Any suggestions?

Respuesta aceptada

Stephen23
Stephen23 el 25 de Oct. de 2018
Editada: Stephen23 el 25 de Oct. de 2018
For just one matrix use either
A = reshape(B(:,1,:),17,[]);
or
A = permute(B(:,1,:),[1,3,2]);
For all of the matrices, it is not required to use a loop:
C = num2cell(permute(B,[1,3,2]),1:2)
Using permute and num2cell is about 30% faster than using a loop (the test file is attached):
Elapsed time is 1.09111 seconds. % loop
Elapsed time is 0.718072 seconds. % num2cell

Más respuestas (0)

Categorías

Más información sobre Loops and Conditional Statements 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