Replacing elements of a logical index vector
5 views (last 30 days)
Show older comments
“Idx” is a logical index vector when a certain “power on” condition is true (e.g. idx=Pwr_on>threshold) Say the result is 5 "zeros" and 5 "ones" per cycle i.e. idx=[0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0.........] Every time idx is true; I need to replace the first element and last element with “0” within the index. So effectively idx=[0;0;0;0;0;0;1;1;1;0;0;0;0;0;0;0;1;1;1;0;0;0;0;0;0.........] Any suggestions
1 Comment
Adam
on 10 Feb 2016
Edited: Adam
on 10 Feb 2016
How are you defining "first element and last element...within the index" for a general case? It is clear in this example, but is this as complicated as your data gets? i.e. there are always n 0's followed by n 1's and then this just cycles every 2n elements?
Accepted Answer
Image Analyst
on 10 Feb 2016
This will do it. It's explicit so you can see what's going on. Of course, you could collapse it all down into a single line of code (though that may be hard to follow).
idx=[0;0;0;0;0;1;1;1;1;1;0;0;0;0;0;1;1;1;1;1;0;0;0;0;0]
di = [0; diff(idx)]
leadingEdges = find(di>0)
trailingEdges = find(di<0)-1
idx(leadingEdges) = 0;
idx(trailingEdges) = 0
0 Comments
More Answers (2)
Jos (10584)
on 10 Feb 2016
Edited: Jos (10584)
on 10 Feb 2016
X = logical([0 1 1 0 1 1 1 0 0 1 1 1 1 0 0 0 1 1 1 1 1])
Y = fliplr(conv(fliplr(conv(double(X),[1 1],'same')),[1 1],'same'))>3
0 Comments
See Also
Categories
Find more on Numeric Types 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!