How to replace ones and zeros in a logical vector with vectors of corresponding length?

5 views (last 30 days)
I need to recombine two vectors which where seperatet by logical indexing:
idx = [1 0 0 1 1 0 0]; % appearance of logical index
a = [2 3 4]; % the values of a have to replace the ones in indx in the same order
b = [9 8 7 7]; % the values of b have to replace the zeros in indx in the same order
The solution should look like this:
c = [2 9 8 3 4 7 7]; % recombined vector

Accepted Answer

Scott MacKenzie
Scott MacKenzie on 10 Aug 2021
idx = [1 0 0 1 1 0 0]; % appearance of logical index
a = [2 3 4]; % the values of a have to replace the ones in indx in the same order
b = [9 8 7 7];
c = [a b];
idx = logical(idx);
c = [c(idx) c(~idx)]
c = 1×7
2 9 8 3 4 7 7

More Answers (1)

Yongjian Feng
Yongjian Feng on 10 Aug 2021
Try this:
idx = [1 0 0 1 1 0 0]; % appearance of logical index
a = [2 3 4]; % the values of a have to replace the ones in indx in the same order
b = [9 8 7 7]; % the values of b have to replace the zeros in indx in the same order
c = [];
aIdx = 1;
bIdx = 1;
for i=1:length(idx)
if idx(i) == 1
c(end+1)=a(aIdx);
aIdx = aIdx + 1;
else
c(end+1) = b(bIdx);
bIdx = bIdx + 1;
end
end
c

Categories

Find more on Dynamic System Models in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!