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

5 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

Scott MacKenzie
Scott MacKenzie am 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

Weitere Antworten (1)

Yongjian Feng
Yongjian Feng am 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

Kategorien

Mehr zu Dynamic System Models finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by