Identifying sequences of two or more and maintaining vector shape

I'm pretty new to Matlab and know what I want to do, just not how to code it. I have a vector in which I want to remove nonzero values which are not in a sequence of two or more i.e.
0 112 58 0 0 0 0 114 0 24 0 0
and turn the 114 and 24 values to 0, but keep any value sequences of two or more.
I've switched to logicals to keep things simple and managed to find out how many times there are these sequences:
ML4= find(diff([-1 ML3 -1]) ~= 0);
runlength = diff(ML4) ;
runlength1 = runlength(1+(ML3(1)==0):2:end);
numberBursts=sum(runlength1>1);
but not a way to keep the original vector shape Any help much appreciated.

 채택된 답변

Andrei Bobrov
Andrei Bobrov 2013년 12월 6일
편집: Andrei Bobrov 2013년 12월 6일
x = [0 112 58 0 0 0 0 114 0 24 0 0];
x(strfind([0,x(:)' ~= 0, 0],[0 1 0])) = 0;

추가 답변 (1개)

Jos (10584)
Jos (10584) 2013년 12월 6일
x = [0 112 58 0 0 0 0 114 0 24 0 0]
xx = [false x~=0 false]
ix = 2:numel(x)+1
tf = ~xx(ix-1) & xx(ix) & ~xx(ix+1)
y = x
y(tf) = 0

카테고리

도움말 센터File Exchange에서 Robust Control Toolbox에 대해 자세히 알아보기

질문:

2013년 12월 6일

편집:

2013년 12월 6일

Community Treasure Hunt

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

Start Hunting!

Translated by