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

2 Ansichten (letzte 30 Tage)
Joe
Joe am 28 Mai 2015
Kommentiert: Joe am 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!

Akzeptierte Antwort

Andrei Bobrov
Andrei Bobrov am 28 Mai 2015
Bearbeitet: Andrei Bobrov am 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 Kommentare
Joe
Joe am 28 Mai 2015
It worked thanks!
Joe
Joe am 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (1)

Azzi Abdelmalek
Azzi Abdelmalek am 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']

Kategorien

Mehr zu Data Type Conversion finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by