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 view (last 30 days)
Show older comments
In gener i would like to change
0 0 1 0 0 0 0
to
0 1 1 1 1 1 0
0 Comments
Accepted Answer
Guillaume
on 5 Oct 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 Comments
Guillaume
on 5 Oct 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!
More Answers (2)
KSSV
on 5 Oct 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 Comments
Jos (10584)
on 5 Oct 2016
Edited: Jos (10584)
on 5 Oct 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 Comments
See Also
Categories
Find more on Logical 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!