MATLAB Answers

# How do I add to a cell array based on logicals?

1 view (last 30 days)
Mitch Hezel on 22 Apr 2021
Commented: Mitch Hezel on 22 Apr 2021
I have two arrays, A and B.
A is an array of random numbers. B is an array of logicals, either 0 or 1. A is the same length as B.
For as long as B is 0, I want to add the data from A at those indices to a cell in a separate cell array.
for example,
A = [1 2 3 4 5 6 7 8 9 10]
B = [1 0 0 0 1 0 0 0 1 0].
The code should output C, where C{1} = [2,3,4], C{2} = [6 7 8], C{3} = 10. How should I accomplish that?
I'm currently doing it with a bunch of for loops which misses the last chunk of data, that is, it misses data in the event B doesn't end in 1.
##### 0 CommentsShowHide -1 older comments

Sign in to comment.

### Accepted Answer

David Hill on 22 Apr 2021
There might be an easier way. Here is one with a single loop.
b=num2str(B);
b=b(b~=' ');
[idx1,idx2]=regexp(b,'+');
for k=1:length(idx1)
C{k}=A(idx1(k):idx2(k));
end
##### 2 CommentsShowHide 1 older comment
Mitch Hezel on 22 Apr 2021
Interestingly, this code is cleaner than my code (by probably a factor of 3 or more) but it is much slower. Is regexp a slow operation?

Sign in to comment.

R2020a

### Community Treasure Hunt

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

Start Hunting!