Azzera filtri
Azzera filtri

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

2 visualizzazioni (ultimi 30 giorni)
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?

Risposta accettata

Stephen23
Stephen23 il 25 Ott 2018
Modificato: Stephen23 il 25 Ott 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

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by