How to iterate over cell array, creating only unique combinations of cells

8 views (last 30 days)
Hello,
I have data stored in a n x n cell array. For example:
data = {[1 1 1] [2 2 2]; [3 3 3] [4 4 4]};
I want to iterate over this cell array and create all unique combinations of cells. In this case, they would be:
  • [1 1 1] [2 2 2]
  • [1 1 1] [3 3 3]
  • [1 1 1] [4 4 4]
  • [2 2 2] [3 3 3]
  • [2 2 2] [4 4 4]
  • [3 3 3] [4 4 4]
Please note that every combination (e.g. [1 1 1][2 2 2]) only exists once regardless of order (i.e., there is no [2 2 2][1 1 1] combination).
I have tried doing this with for loops, however, I can't get behind how to not create the second combination.
Important note: I am trying to do this with for-loops since I need a way to keep track of from which column the combination is coming from (i.e. if the two data points are from the same column --> this would apply to [1 1 1][3 3 3] and [2 2 2][4 4 4] in my example). Therefore any function which simply returns me the permutations or binary coefficient won't work.

Accepted Answer

Stephen23
Stephen23 on 11 Jan 2021
Edited: Stephen23 on 11 Jan 2021
data = {1,2;3,4};
n = numel(data);
m = nchoosek(1:n,2) % each row is one combination pair.
m = 6×2
1 2 1 3 1 4 2 3 2 4 3 4
out = data(m) % output
out = 6x2 cell array
{[1]} {[3]} {[1]} {[2]} {[1]} {[4]} {[3]} {[2]} {[3]} {[4]} {[2]} {[4]}
[idr,idc] = ind2sub(size(data),m);
idx = ~diff(idc,1,2) % output is from the same column
idx = 6x1 logical array
1 0 0 0 0 1

More Answers (0)

Categories

Find more on Matrices and 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!