Finding maximum y value corresponding to same x values.
8 次查看(过去 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!