基于元胞数组的唯一列

Unique columns based on cell array

假设我有一个格式如下的元胞数组:

A = {4;[22 16 4]; 23; 51; [16 22]; 32; [4 50]}; 

我想输出行中向量的任何排列所获得的唯一 。 例如,对于上面的例子,唯一满足这个的列向量是 [4; 22; 23; 51; 16; 32; 50][4; 16; 23; 51; 22; 32; 50]

我无法从第二行或最后一行中选择 4,因为 4 是第一行中的唯一选项。此外,我不能在第二行和第五行都选择 22,因为这会使该列不唯一。虽然某些行中的空选择是不允许的,但是如果没有唯一的列,那么我将需要输出一个空列。

有没有人有在 Matlab 中(相当快地)执行此操作的巧妙方法?任何帮助将非常感激。 非常感谢!

这是一种蛮力方法:

  1. 通过从每个向量中选择一个元素(笛卡尔积)生成所有可能的列。这可以通过 this approach.
  2. 来完成
  3. 只保留所有元素都不同的列。这可以通过 sortdiffall 和逻辑索引轻松完成。

代码:

A = {4; [22 16 4]; 23; 51; [16 22]; 32; [4 50]};  % Data
n = numel(A);                                     % Step 1
c = cell(1,n);
[c{end:-1:1}] = ndgrid(A{:});
c = cat(n+1, c{end:-1:1});
c = reshape(c,[],n).'; % Step 1
result = c(:,all(diff(sort(c,1),[],1),1));        % Step 2