Matlab 基于单元数组的唯一列

Matlab 基于单元数组的唯一列,matlab,unique,cell-array,cells,Matlab,Unique,Cell Array,Cells,假设我有一个以下格式的单元格数组: 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,因为这会使列不唯一。虽然某些行中不允许有空选择,但如果没有唯一的列,则需要输出一个

假设我有一个以下格式的单元格数组:

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中有一种聪明的方法(相当快地)实现这一点?任何帮助都将不胜感激。
非常感谢

这里有一个蛮力方法:

  • 从每个向量(笛卡尔积)中选择一个元素,生成所有可能的列。这可以通过以下方式完成
  • 仅保留所有元素都不同的列。这可以通过
    排序
    差异
    全部
    和逻辑索引轻松完成
  • 代码:

    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