How do I find the duration of a number in an array?

2 vues (au cours des 30 derniers jours)
Joe
Joe le 28 Mai 2015
Commenté : Joe le 28 Mai 2015
Given the array
c=[3 3 3 5 5 6 7 8 1 1 3 3 3 0 0 0 4 4 4 5 6 7 8 3 3 3 9 10 3];
I am trying to find the average duration of each number in this array. For example, I am looking to find the average duration for 3 in this array. I know that 3 occurs 10 times but is grouped into 4 separate occurrences. I want the output to be the average duration for 3...which is 2.5. please help!

Réponse acceptée

Andrei Bobrov
Andrei Bobrov le 28 Mai 2015
Modifié(e) : Andrei Bobrov le 28 Mai 2015
c = c(:);
ii = [true;diff(c)~=0];
i2 = diff([find(ii);numel(ii)+1]);
[a,b,c0] = unique(c(ii),'first'); % in new version of MATLAB:
[~,jj] = sort(b); %
[~,j1] = sort(jj); % [a1,~,c1] = unique(c(ii),'stable');
a1 = a(jj); %
c1 = j1(c0); %
out = [a1,accumarray(c1,i2,[],@mean)];
or with sorting
ii = [true;diff(c)~=0];
i2 = diff([find(ii);numel(ii)+1]);
[a,~,c0] = unique(c(ii));
out1 = [a,accumarray(c0,i2,[],@mean)]
  2 commentaires
Joe
Joe le 28 Mai 2015
It worked thanks!
Joe
Joe le 28 Mai 2015
I am applying this to my data set and the inputs range from 1-10. However, if there are no occurrences of an input (example= there is no 2 in the data set above how can I make sure the output array will have a zero in the place of the 2 or any other number in the series? Is there a way to output a c(2,10) array with c(1,10) being equal to 1:10 and the c(2,10) array being filled with the output values for average duration. if there are none I would want an empty place value to be filled with a zero.

Connectez-vous pour commenter.

Plus de réponses (1)

Azzi Abdelmalek
Azzi Abdelmalek le 28 Mai 2015
c=[3 3 3 5 5 6 7 8 1 1 3 3 3 0 0 0 4 4 4 5 6 7 8 3 3 3 9 10 3];
[ii,jj,kk]=unique(c)
d=accumarray(kk,1)
for k=1:numel(ii)
a=ii(k)
res(k)=d(k)/numel(strfind([0 c==a 0],[0,1]))'
end
out=[ii' res']

Catégories

En savoir plus sur Data Type Conversion 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