Sum of nonzero vector elements

19 vues (au cours des 30 derniers jours)
hdiba
hdiba le 15 Sep 2016
Commenté : hdiba le 15 Sep 2016
Hallo everybody!
i have a vector with zeros and nonzero-entries. Now i would like to make the sum of the nonzero-elements between the zeros.example:
v= 1 2 3 0 0 0 4 5 0 6 7 0 8 9
out=6 9 13 17
in addition i would like to know the number of elements in each sum and the index of the first-sum element.
num= 3 2 2 2
indx= 1 7 10 13
can anyone help? thanks
  1 commentaire
José-Luis
José-Luis le 15 Sep 2016
Is this homework? What have you tried so far?
You could have a look at bwconncomp().

Connectez-vous pour commenter.

Réponse acceptée

Azzi Abdelmalek
Azzi Abdelmalek le 15 Sep 2016
v= [1 2 3 0 0 0 4 5 0 6 7 0 8 9]
ii=[0 v~=0 0]
idx1=strfind(ii,[0 1])
idx2=strfind(ii,[1 0])-1
out=cell2mat(arrayfun(@(x,y) [sum(v(x:y));y-x+1;x],idx1,idx2,'un',0))
  1 commentaire
hdiba
hdiba le 15 Sep 2016
Thanks a lot !! perfect

Connectez-vous pour commenter.

Plus de réponses (1)

Andrei Bobrov
Andrei Bobrov le 15 Sep 2016
Modifié(e) : Andrei Bobrov le 15 Sep 2016
v= [1 2 3 0 0 0 4 5 0 6 7 0 8 9];
b = bwlabel(v(:));
[a,ii] = unique(b,'first');
indx = ii(a ~= 0);
t = b ~= 0;
num = accumarray(b(t),1);
out = accumarray(b(t),v(t));
if you not have Image Processing Toolbox then:
t = v(:) ~= 0;
p = diff([false;t]) == 1;
indx2 = find(p);
ii = cumsum(p);
num2 = accumarray(ii,t);
out2 = accumarray(ii,v(:));

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by