Split a matrix at specific row
13 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Alex Grimaud
am 6 Mär. 2018
Beantwortet: Alex Grimaud
am 12 Mär. 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 Kommentare
Akzeptierte Antwort
Jos (10584)
am 12 Mär. 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 Kommentare
Weitere Antworten (2)
Akira Agata
am 12 Mär. 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 Kommentare
Jos (10584)
am 12 Mär. 2018
Why so difficult? More than a decade ago, Matlab has created the function mat2cell to do exactly this ...
Akira Agata
am 12 Mär. 2018
Bearbeitet: Akira Agata
am 12 Mär. 2018
Yes, mat2cell has just slipped my mind. Thanks!
Siehe auch
Kategorien
Mehr zu Operators and Elementary Operations finden Sie in Help Center und File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!