Eliminating Certain Timestamps from an Array

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.

 Respuesta aceptada

Sean de Wolski
Sean de Wolski el 23 de Mayo de 2016
Editada: Sean de Wolski el 24 de Mayo de 2016
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 comentarios

Midimistro
Midimistro el 23 de Mayo de 2016
what is xmx? Is it the resulting timestamp of what I am looking for, or something else?
I also forgot that there's a third datapoint I forgot to mention that needs to have the same indecies as the new timestamp.
The data is more like this:
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
And the results should look something like this:
xnew = [.01, .03, .04, .07, 1.0]
znew = [.02, .03, .06, .09, 1.2]
These new data points are then used within a function to find whether these data points match another set of data points, but that's a separate problem.
Sean de Wolski
Sean de Wolski el 24 de Mayo de 2016
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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre MATLAB en Centro de ayuda y File Exchange.

Productos

Preguntada:

el 23 de Mayo de 2016

Comentada:

el 24 de Mayo de 2016

Community Treasure Hunt

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

Start Hunting!

Translated by