I have a workspace A with value 81536x10 double. I want to take create new workspace from workspace A with row 1 to 112, 225 to 336, 449 to 560 and so on.

 Accepted Answer

ix = [0:224:81563]' + 1:112 ; % calculate row indices
ix(ix>size(A,1)) = [] % remove row indices that are too larger
A2 = A(ix, :) % a single array
Alternatively, you can store each section in a cell array
A3 = arrayfun(@(k) A(k:k+111, :), 1:224:81563, 'un', 0) % no check of indices

5 Comments

Thank you for answer, but from that code, i only can get row 1-112 only but i want another rows 225 to 336, 449 to 560 and so on (until 81536)
My code does that doesn't it? I suggest you come up with a smaller example, giving the input and expected output, for instance for a 10-by-2 array A.
I tried with 6 by 2 array A and want to obtain values from rows 1-2 and 5-6 but the output only rows 1-2
Oh, this might be related to your version of ML.
A = randi(100,6,2)
ix = bsxfun(@plus,[0:1]', 1:4:size(A,1))
A(ix,:)
should return rows 1-2 and rows 5-6 of A
Thank you, now it is working

Sign in to comment.

More Answers (0)

Products

Release

R2017b

Tags

Community Treasure Hunt

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

Start Hunting!