create cell array based on unique combinations in two columns

1 view (last 30 days)
Hi!
i have a matrix with 3 columns and the first two columns contains x- and y coordinates.
looks something like this [1 1 1, 1 1 2, 2 1 1, 1 2 1, 2 1 6......]
I want to create a cell array based on the content in the two first columns, more precise i want each cell to contain all values in column 3 that has the same values in column 1 and 2.
I have managed to do it based on the value in one columns:
X=arrayfun(@(x) data(data(:,1)==x, :), unique(data(:,1)),'uniformoutput', false);
the problem is that the same x coordinate (column 1) can have several y coordinates (column 2).
so my question is: how can a create a cell array based on the unique combination of two columns?

Accepted Answer

Bruno Luong
Bruno Luong on 6 Nov 2018
data=ceil(4*rand(20,3))
[m,n] = size(data);
B = sortrows(data,[1 2]);
G = mat2cell(B,diff([0; find(any(diff(B(:,[1 2])),2)); m]),n);
G{:}

More Answers (1)

Bruno Luong
Bruno Luong on 6 Nov 2018
data=ceil(4*rand(20,3))
[~,~,J] = unique(data(:,[1,2]),'rows');
G = accumarray(J(:),(1:length(J)),[],@(r) {data(sort(r),:)});
G{:}

Categories

Find more on Multidimensional Arrays in Help Center and File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!