Effacer les filtres
Effacer les filtres

Split a matrix in rows according to a vector

1 vue (au cours des 30 derniers jours)
Eli Dim
Eli Dim le 28 Juin 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

Réponse acceptée

Star Strider
Star Strider le 28 Juin 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

Plus de réponses (1)

Azzi Abdelmalek
Azzi Abdelmalek le 28 Juin 2015
x=cumsum(B)-B+1
y=cumsum(B)
out=arrayfun(@(ii,jj) A(ii:jj,:),x,y,'un',0)

Catégories

En savoir plus sur Data Types 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!

Translated by