Borrar filtros
Borrar filtros

Split a matrix in rows according to a vector

1 visualización (últimos 30 días)
Eli Dim
Eli Dim el 28 de Jun. de 2015
Respondida: Star Strider el 28 de Jun. de 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

Respuesta aceptada

Star Strider
Star Strider el 28 de Jun. de 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

Más respuestas (1)

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

Categorías

Más información sobre Data Types en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by