Replacing elements of a logical index vector
5 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
Kashmir Singh
il 10 Feb 2016
Modificato: Jos (10584)
il 10 Feb 2016
“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 Commento
Adam
il 10 Feb 2016
Modificato: Adam
il 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?
Risposta accettata
Image Analyst
il 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 Commenti
Più risposte (2)
Jos (10584)
il 10 Feb 2016
Modificato: Jos (10584)
il 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 Commenti
Vedere anche
Categorie
Scopri di più su Numeric Types in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!