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

7 Ansichten (letzte 30 Tage)
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.

Akzeptierte Antwort

Stephen23
Stephen23 am 11 Jan. 2021
Bearbeitet: Stephen23 am 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

Weitere Antworten (0)

Kategorien

Mehr zu Matrices and Arrays finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by