MATLAB Answers

How to select or group sections of an array without using indexing

5 views (last 30 days)
So i have an array of elements like this:
A = [NaN; NaN; NaN; NaN; 2; 3; 6; 7; NaN; NaN; NaN; NaN; NaN; 4; 6; 8; 8; NaN; NaN; NaN; NaN]
What I need is to collect each group of numbers into new separate arrays like this:
B = [2; 3; 6; 7]
C = [4; 6; 8; 8]
How do i do that without hard-coding with the array index numbers? Thanks

  0 Comments

Sign in to comment.

Accepted Answer

Stephen Cobeldick
Stephen Cobeldick on 20 Oct 2020
>> A = [NaN, NaN, NaN, NaN, 2, 3, 6, 7, NaN, NaN, NaN, NaN, NaN, 4, 6, 8, 8, NaN, NaN, NaN, NaN];
>> X = diff([true,isnan(A),true]);
>> B = find(X<0);
>> E = find(X>0)-1;
>> F = @(b,e) A(b:e);
>> C = arrayfun(F,B,E,'uni',0);
>> C{1}
ans =
2 3 6 7
>> C{2}
ans =
4 6 8 8

  2 Comments

Femi Bolarinwa
Femi Bolarinwa on 20 Oct 2020
What if A was a column vector instead:
A = [NaN; NaN; NaN; NaN; 2; 3; 6; 7; NaN; NaN; NaN; NaN; NaN; 4; 6; 8; 8; NaN; NaN; NaN; NaN];
How would this change the code to achieve:
C = [2; 3; 6; 7]
B = [4; 6; 8; 8]
Thanks!
Stephen Cobeldick
Stephen Cobeldick on 20 Oct 2020
X = diff([true;isnan(A(:));true]); % works for either column or row vector A

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!