MATLAB: Finding maximum y value for the same x values and corresponding z values

accumarray

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 am using the following code provided in the community:
[uv,~,idx] = unique(xy(:,1)); %what do they correspond to?
xmax = accumarray(idx,xy(:,2),[],@max); %build matrix
[uv xmax]
My question is that if I have additional z column
z
1
9
7
8
6
5
3
2
4
then how can I also pick up the corresponding z values?

Best Answer

Use the ismember function with the 'rows' option:
xy = [1 5
1 7
1 9
2 8
2 22
2 11
5 5
5 10
5 20];
z = [1
9
7
8
6
5
3
2
4];
xyz = [xy z];
[uv,~,idx] = unique(xy(:,1)); %what do they correspond to?
xmax = accumarray(idx,xy(:,2),[],@max); %build matrix
Result = [uv xmax];
[~, ix] = ismember(Result(:,1:2), xyz(:,1:2), 'rows');
All_Columns = xyz(ix,:)
All_Columns =
1 9 7
2 22 6
5 20 4