Eliminating Certain Timestamps from an Array
조회 수: 1 (최근 30일)
이전 댓글 표시
I have two arrays: "Time" and "Bytes", both of which correspond to one another (aka, are the same size and refer to the same type of data). I need to eliminate certain data points in "Time" containing duplicate timestamps, but at the same time, select those with the higher "Byte" value for that timestamp.
For starters, I know I can use unique() to find the non-duplicate timestamps, but this function doesn't take into consideration finding the max value of Bytes in the process. Is there any simple way of going about this?
Whether the answer is in function form or in-line form doesn't matter to me. If you need an example of data, let me know.
댓글 수: 0
채택된 답변
Sean de Wolski
2016년 5월 23일
편집: Sean de Wolski
2016년 5월 24일
NEW
x = [.01, .01, .03, .04, .04, .04, .07, 1.0] ;%Timestamp
y = [096, 140, 096, 096, 140, 579, 579, 579] ;%Bytes
z = [.01, .02, .03, .04, .04, .06, .09, 1.2]; %TimestampEnd
[ux,~,idx] = unique(x');
zmx = accumarray(idx,(1:numel(x))',[],@(ii)getz(y(ii),z(ii)));
[ux zmx]
Where getz() is in getz.m.
function mxz = getz(y,z)
[~, idxmx] = max(y);
mxz = z(idxmx);
end
OLD
x = [1;2;3;2;3]; % "time stamps"
y = (1:5)'; % Bytes, pick max for each unique x.
[ux,~,idx] = unique(x);
xmx = accumarray(idx,y,[],@max);
[ux xmx]
Use the third output of unique to pivot and apply the max function with accumarray.
댓글 수: 3
Sean de Wolski
2016년 5월 24일
See NEW above.
You need to back index from the max of y into the corresponding z. It's nice to do this in a separate function.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Matrices and Arrays에 대해 자세히 알아보기
제품
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!