how to count non zero elements in a vector and replace this values based on the count values
5 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Azzi Abdelmalek
2015-7-30
编辑:Azzi Abdelmalek
2015-7-30
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 个评论
更多回答(2 个)
Andrei Bobrov
2015-7-30
编辑:Andrei Bobrov
2015-7-30
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 个评论
Sean de Wolski
2015-7-30
histcounts is new in R2014b, if you're on an older release either upgrade or use histc.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Data Distribution Plots 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!