Max in bin using histc

I performed several tests to measure how y depends on x. I repeated the value of x in some of the tests. If x was repeated, the higher values of y are more reliable. Given a vector of x and y, I would like to find (a) the max value of y obtained for each value of x, i.e. selecting the max of the repeated tests plus any y value for which the value of x wasn't retested, and (b) all values of y from the repeated tests that were not the max value. I believe this can be done with a clever application of histc. Here is an example,
x = [ 219 292 292 365 365 365 402 438 438 511 ] ; % Independent variable with some repeats
y = [ 69.9 76.4 72.6 61.6 48.9 77.7 77.6 76 78.9 73.3 ] ; % Dependent variable
iMax = ?? ; % Index to max value of y obtained for each value of x; also include values of y for which x value wasn't retested
plot(x(iMax), y(iMax), 'b') ; hold on ;
iNotMax = ?? % For repeated tests, find index to all non-max values of y
plot(x(iNotMax), y(iNotMax), 'b*') ;

1 个评论

I think I can find (a) as follows, then overplot all values to see (b) visually, but perhaps there is a better approach?
%%
[ nInBin, indexToBin ] = histc(x, unique(x)) ;
iGoodBin = indexToBin > 0 ;
maxValue = accumarray(col_vect(indexToBin(iGoodBin)), ...
col_vect(y(iGoodBin)), [], @max, NaN) ;

请先登录,再进行评论。

 采纳的回答

second variant
[a b b] = unique(x);
out = [a',accumarray(b',y',[],@max)];

1 个评论

I will accept this one because it is shorter but both solutions work and were useful for learning so thanks to both authors.

请先登录,再进行评论。

更多回答(1 个)

Here's one way:
x = [ 219 292 292 365 365 365 402 438 438 511 ];
y = [ 69.9 76.4 72.6 61.6 48.9 77.7 77.6 76 78.9 73.3 ];
z = sortrows([x; y]');
[~,indexToLastUniqueX] = unique(x,'last');
zUnique = z(indexToLastUniqueX,:)

1 个评论

Thanks, this solution works and I appreciate it. I was stumped on how to accept 2 answers, seems I can't, so I accepted the shorter one.

请先登录,再进行评论。

类别

在 帮助中心 和 File Exchange 中查找有关 White 的更多信息

产品

标签

Community Treasure Hunt

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

Start Hunting!

Translated by