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 visualización (últimos 30 días)
Mostrar comentarios más antiguos
FC93
el 5 de Oct. de 2016
Editada: Jos (10584)
el 5 de Oct. de 2016
In gener i would like to change
0 0 1 0 0 0 0
to
0 1 1 1 1 1 0
0 comentarios
Respuesta aceptada
Guillaume
el 5 de Oct. de 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 comentarios
Guillaume
el 5 de Oct. de 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!
Más respuestas (2)
KSSV
el 5 de Oct. de 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 comentarios
Jos (10584)
el 5 de Oct. de 2016
Editada: Jos (10584)
el 5 de Oct. de 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 comentarios
Ver también
Categorías
Más información sobre Logical en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!