Split a matrix in rows according to a vector

1 回表示 (過去 30 日間)
Eli Dim
Eli Dim 2015 年 6 月 28 日
回答済み: Star Strider 2015 年 6 月 28 日
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

採用された回答

Star Strider
Star Strider 2015 年 6 月 28 日
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

その他の回答 (1 件)

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

カテゴリ

Help Center および File ExchangeResizing and Reshaping Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by