Finding maximum y value corresponding to same x values.
7 ビュー (過去 30 日間)
古いコメントを表示
I have a n by 2 array.
x y
1 5
1 7
1 9
2 8
2 22
2 11
5 5
5 10
5 20
I'd like to spit out an array of the max y coordinate that corresponds to each x coordinate. So I'd have:
1 9
2 22
5 20
Thanks for any help!
0 件のコメント
回答 (3 件)
Sean de Wolski
2013 年 2 月 21 日
xy = [
1 5
1 7
1 9
2 8
2 22
2 11
5 5
5 10
5 20];
[uv,~,idx] = unique(xy(:,1)); %what do they correspond to?
xmax = accumarray(idx,xy(:,2),[],@max); %build matrix
[uv xmax]
0 件のコメント
Azzi Abdelmalek
2013 年 2 月 21 日
編集済み: Azzi Abdelmalek
2013 年 2 月 22 日
[a,b]=unique(x);
for jj=1:numel(a);
e(jj)=max(y(x==a(jj)));
end
result=[a e]
0 件のコメント
Shashank Prasanna
2013 年 2 月 21 日
Quickest way I can think of is using accumarray:
% let xy be your array
A = accumarray(xy(:,1), xy(:,2), [], @max)
[unique(xy(:,1)) A(A~=0)]
ans =
1 9
2 22
5 20
2 件のコメント
Sean de Wolski
2013 年 2 月 22 日
編集済み: Sean de Wolski
2013 年 2 月 22 日
If you run the unique command first, you skip having to remove the zeros. With 1,2,5 whatever, with 1,2, 5000000 you run out of memory...
With my approach, you build a 1x3 vector regardless of the values, even if they're non-integer :)
Shashank Prasanna
2013 年 2 月 22 日
That's good to note! I didn't see your reply before i put mine in. Thanks for the tip!
参考
カテゴリ
Help Center および File Exchange で Logical についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!