How do I make different groups within a matrix?

12 views (last 30 days)
I have a 2904x3 matrix where each column represents the x, y and z coordinates of some vectors. Some of these vectors have the same z-coordinate and I need to group those together. Any ideas?
Adam Danz on 12 Mar 2021
Extending Mathieu NOE's suggestion, the 3rd output to unique is a grouping variable but you should use the stable flag to ensure that the grouping values correspond to each element of the vector.
% xyz is nx3 matrix of [x,y,z] values
[~,~,zgroup] = unique(xyz(:,3));
Alternatively, if you just want to sort the matrix according to the z column,
xyzSort = sortrows(xyz,3);

Veronica Taurino on 12 Mar 2021
Edited: Veronica Taurino on 12 Mar 2021
How do you need to get arrays associated?
Try this:
clear all
close all
x= (50)*rand(50,1);
y= (50)*rand(50,1);
z= (50)*rand(50,1);
% I create 4 equal z coordinates:
z(12)=z(23);
z(34)=z(23);
z(1)=z(23);
z(45)=z(23);
z(23)
% Put all together
AA= [x,y,z];
% Look for index
[~, ind] = unique(AA(:, 3), 'rows');
% DUPLICATE INDEX
duplicate_index = setdiff(1:size(AA, 1), ind) % This finds the indexes of duplicates
% duplicate values
duplicate_value = AA(duplicate_index, :) % This extracts the arrays with duplicates
results:
z(23) =
12.6859 % the Z value I imposed
duplicate_index = % indexes of duplicates the script finds
12 23 34 45
duplicate_value = % array with same Z the script finds
19.6717 40.5660 12.6859
47.5017 3.6415 12.6859
11.9746 35.4336 12.6859
38.4967 19.0424 12.6859
Jaime Castiblanques on 15 Mar 2021
I can't thank you enough for this. It was very helpful!