Filter löschen
Filter löschen

Replace 1's with 0's if there is less that five 1's between 0's in vector

2 Ansichten (letzte 30 Tage)
Hi everyone,
I want to replace 1's with 0's if there are less than five 1's between the zeros in a large vector. For example, I have the following vector:
x = [1; 1; 1; 1; 1; 1; 0; 1; 1; 1; 0; 1; 1; 1; 1; 1; 1; 0; 1; 1; 1; 1; 1; 1; 1; 0];
And I would like to create a script that can find and replace only the 1's where there are less than five 0's in between, which would end up with the following results with the example from above:
x = [1; 1; 1; 1; 1; 1; 0; 0; 0; 0; 0; 1; 1; 1; 1; 1; 1; 0; 1; 1; 1; 1; 1; 1; 1; 0];
Thanks a lot in advance,
Eric

Akzeptierte Antwort

the cyclist
the cyclist am 1 Apr. 2017
Here is one way:
Download Jan Simon's RunLength code from the File Exchange. Then,
x = [1; 1; 1; 1; 1; 1; 0; 1; 1; 1; 0; 1; 1; 1; 1; 1; 1; 0; 1; 1; 1; 1; 1; 1; 1; 0];
[b n bi] = RunLength(x);
shortOneRunIndex = find(b'==1 & n<5);
for ns = shortOneRunIndex
x(bi(ns):bi(ns+1)-1) = 0;
end
This algorithm assumes that the sequence ends with a zero, as your example did. It could be fixed up to not require that assumption.

Weitere Antworten (0)

Kategorien

Mehr zu Get Started with MATLAB 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