how to count non zero elements in a vector and replace this values based on the count values
5 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
D Marini
el 30 de Jul. de 2015
Comentada: Sean de Wolski
el 30 de Jul. de 2015
Dear all,
I'm a new matlab user and in my case i have a vector let say: v= [0 0 0 0.1 0.2 0.3 0.4 0.5 0 0 0 0 0 0 0.1 0.2] I want to count consecutive non zero values i.e in my vector have first five nonzero values [0.1 0.2 0.3 0.4 0.5] and two last nozeros values[0.1 0.2] what I want is: count the consecutive non zero values and put a condition i.e if the length of nonzeros is greater then 3 (count>3) then the respective values of vector V(i) remain v(i) if the length consecutive values is less than three (count<3) then respective values of v(i) =0 I want to get a new vector let say v1 derivation from vector v where: v1= [0 0 0 0.1 0.2 0.3 0.4 0.5 0 0 0 0 0 0 0 0]
Any help would be appreciated Thank you DM
0 comentarios
Respuesta aceptada
Azzi Abdelmalek
el 30 de Jul. de 2015
Editada: Azzi Abdelmalek
el 30 de Jul. de 2015
v= [0 0 0 0.1 0.2 0.3 0.4 0.5 0 0 0 0 0 0 0.1 0.2]
idx=[0 v~=0 0]
idx1=strfind(idx,[0 1])
idx2=strfind(idx,[1 0])-1
id=idx2-idx1+1
ii1=idx1(id>3)
ii2=idx2(id>3)
jj=cell2mat(arrayfun(@(x,y) x:y,ii1,ii2,'un',0))
out=zeros(size(v))
out(jj)=v(jj)
0 comentarios
Más respuestas (2)
Andrei Bobrov
el 30 de Jul. de 2015
Editada: Andrei Bobrov
el 30 de Jul. de 2015
v= [0 0 0 0.1 0.2 0.3 0.4 0.5 0 0 0 0 0 0 0.1 0.2]';
ii = v ~= 0;
t = [false;diff(ii)==1];
i1 = cumsum(t).*ii;
N = histcounts(i1,1:(max(i1)+1));
i1(ismember(i1,find(N <= 3))) = 0;
out = v.*i1;
2 comentarios
Sean de Wolski
el 30 de Jul. de 2015
histcounts is new in R2014b, if you're on an older release either upgrade or use histc.
Ver también
Categorías
Más información sobre Data Distribution Plots 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!