Split a matrix at specific row
4 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Alex Grimaud
le 6 Mar 2018
Réponse apportée : Alex Grimaud
le 12 Mar 2018
Hello,
I have a 105x4 matrix and a vector [11 12 11 11 12 12 13 11 12] where the sum represent the row size of the matrix. I want to divide the matrix into several matrix, the first will start at row 1 to 11 and give a 11x4 matrix. The second will start a 12 to 24 and give a 12x4 matrix.. etc.. How can i do that? i'm a little bit lost
Thanks in advance for your help
0 commentaires
Réponse acceptée
Jos (10584)
le 12 Mar 2018
Use mat2cell:
M = randi(20, 105,4) ;
V = [11 12 11 11 12 12 13 11 12] ;
C = mat2cell(M, V , size(M,2)) ;
0 commentaires
Plus de réponses (2)
Akira Agata
le 12 Mar 2018
Like this?
% Input matrix (A) and vector (h)
A = rand(105,4);
h = [11 12 11 11 12 12 13 11 12];
% Calculate start- and end-row index based on the given vector
endIdx = cumsum(h);
startIdx = [1 endIdx(1:end-1)+1];
% Separate the matrix
C = arrayfun(@(x,y) A(x:y,:),startIdx,endIdx,'UniformOutput',false);
The result looks like:
>> C
C =
1×9 cell array
{11×4 double} {12×4 double} {11×4 double} {11×4 double} {12×4 double} {12×4 double} {13×4 double} {11×4 double} {12×4 double}
2 commentaires
Jos (10584)
le 12 Mar 2018
Why so difficult? More than a decade ago, Matlab has created the function mat2cell to do exactly this ...
Akira Agata
le 12 Mar 2018
Modifié(e) : Akira Agata
le 12 Mar 2018
Yes, mat2cell has just slipped my mind. Thanks!
Voir également
Catégories
En savoir plus sur Operators and Elementary Operations dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!