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