I have a dummy vector with 5000 rows and 1 column . I have some single 1 in this vector. No I want to change all 0 before the 1 to 1 and also change the 3 following 0 after the 1 to 1. But I don't know how. Could someone help me?Thank you a lot.
1 Ansicht (letzte 30 Tage)
Ältere Kommentare anzeigen
FC93
am 5 Okt. 2016
Bearbeitet: Jos (10584)
am 5 Okt. 2016
In gener i would like to change
0 0 1 0 0 0 0
to
0 1 1 1 1 1 0
0 Kommentare
Akzeptierte Antwort
Guillaume
am 5 Okt. 2016
One possibility, assuming you're using R2016b:
v = [0 0 0 0 1 0 0 0 0 0 0 0 1 0 0 0 0 0 0]; %for example
startseq = strfind(v, [0 1 0 0 0]); %strfind also work for finding sequences of numbers
v(startseq + (0:4)') = repmat([1 1 1 1 1], 1, numel(startseq));
If prior to R2016b, replace startseq + (0:4)' in the last line by:
bsxfun(@plus, startseq, (0:4)')
3 Kommentare
Guillaume
am 5 Okt. 2016
What is wrong is that you're using a version before R2016b.
As I wrote in my answer, If prior to R2016b, replace .... Follow the instructions!
Weitere Antworten (2)
KSSV
am 5 Okt. 2016
A = [0 0 1 0 0 0 0] ;
B = A ;
B(A==1) = 0 ; % replace 1 with 0
B(A==0) = 1 ; % replace 0 with 1
3 Kommentare
Jos (10584)
am 5 Okt. 2016
Bearbeitet: Jos (10584)
am 5 Okt. 2016
You can convolve your vector with a series of ones using filter, which will add a specific number of ones after each array
a = [0 0 1 0 0 0 0 0]
filter(ones(1,4),1,a) % add 3 ones
% [0 0 1 1 1 1 0 0]
Using something similar on the reversed array will give you what you want.
FUN = @(V,AddN) filter(ones(1,AddN+1),1,V) % a function for convenience
V = [0 0 1 0 0 0 0 0 0 1 1 0 0]
FUN(V,3) | fliplr(FUN(fliplr(V),1)) % add 3 ones after and 1 one before each 1 in V
0 Kommentare
Siehe auch
Kategorien
Mehr zu Logical 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!