基于元胞数组的唯一列
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 中(相当快地)执行此操作的巧妙方法?任何帮助将非常感激。
非常感谢!
这是一种蛮力方法:
- 通过从每个向量中选择一个元素(笛卡尔积)生成所有可能的列。这可以通过 this approach.
来完成
- 只保留所有元素都不同的列。这可以通过
sort
、diff
、all
和逻辑索引轻松完成。
代码:
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
假设我有一个格式如下的元胞数组:
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 中(相当快地)执行此操作的巧妙方法?任何帮助将非常感激。 非常感谢!
这是一种蛮力方法:
- 通过从每个向量中选择一个元素(笛卡尔积)生成所有可能的列。这可以通过 this approach. 来完成
- 只保留所有元素都不同的列。这可以通过
sort
、diff
、all
和逻辑索引轻松完成。
代码:
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