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

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.

 采纳的回答

There might be an easier way. Here is one with a single loop.
b=num2str(B);
b=b(b~=' ');
[idx1,idx2]=regexp(b,'[0]+');
for k=1:length(idx1)
C{k}=A(idx1(k):idx2(k));
end

2 个评论

Looks like that actually works. The only change I had to make was changing b to be a row vector, since regexp is throwing an error if it isn't. Thanks dude! Edit: Ah, realizing that's probably my fault since I made it seem like my data was in row vectors with the example. Either way, it's working.
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?

请先登录,再进行评论。

更多回答(0 个)

类别

在 帮助中心 和 File Exchange 中查找有关 Matrix Indexing 的更多信息

产品

版本

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by