Split a matrix in rows according to a vector
    5 Ansichten (letzte 30 Tage)
  
       Ältere Kommentare anzeigen
    
    Eli Dim
 am 28 Jun. 2015
  
    
    
    
    
    Beantwortet: Star Strider
      
      
 am 28 Jun. 2015
            Hello, If I have a matrix that looks like this:
A = [
[1, 0, 0, 5, 10, 5, 100, 300];
[1, 0, 0, 5, 10, 5, 100, 400];
[1, 0, 0, 5, 10, 5, 100, 450];
[1, 0, 0, 5, 10, 5, 100, 500];
[1, 0, 0, 5, 10, 5, 100, 550];
[1, 0, 0, 5, 10, 5, 100, 600];
[1, 0, 0, 5, 10, 5, 100, 700];
[1, 0, 0, 4, 10, 4, 100, 300];
[1, 0, 0, 5, 10, 5, 100, 450];
[1, 0, 0, 5, 10, 5, 100, 800];
];
and a vector that looks like this:
B = [ 1; 2; 1; 3; 2;1];
How can I split my matrix A according to this rule: The first sub-matrix A has a row number equal to the first value of B The second sub-matrix A has a row number equal to the second value of B etc. I would like to store the split sub-matrices in separate cells. So essentially, the first cell will look like this: 1, 0, 0, 5, 10, 5, 100, 300 the second cell will look like this:
   1, 0, 0, 5, 10, 5, 100, 400
   1, 0, 0, 5, 10, 5, 100, 450
0 Kommentare
Akzeptierte Antwort
  Star Strider
      
      
 am 28 Jun. 2015
        I would use mat2cell:
C = mat2cell(A, B, size(A,2));
C1 = C{1}                           % View Result
C2 = C{2}                           % View Result
C1 =
       1     0     0     5    10     5   100   300
C2 =
       1     0     0     5    10     5   100   400
       1     0     0     5    10     5   100   450
0 Kommentare
Weitere Antworten (1)
  Azzi Abdelmalek
      
      
 am 28 Jun. 2015
        x=cumsum(B)-B+1
y=cumsum(B)
out=arrayfun(@(ii,jj) A(ii:jj,:),x,y,'un',0)
0 Kommentare
Siehe auch
Kategorien
				Mehr zu Resizing and Reshaping Matrices 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!