- 使用bsxfun将一行与其他行进行比较
- 使用arrayfun对每一行执行此操作(或者如果您愿意,可以使用循环)并使用 cell2mat 将输出转换回矩阵
- 使用any和all检查哪些行占主导地位
- 删除这些行
代码:
a=[1 8;2 6;3 5;4 6];
dominated_idxs = any(cell2mat(arrayfun(@(ii) all(bsxfun(@(x,y) x>y,a,a(ii,:)),2),1:size(a,1),'uni',false)),2);
a(dominated_idxs,:) = [];
编辑
如果你想使用>=
而不是>
比较,每一行都会控制自己并被删除,所以你最终会得到一个空矩阵。通过如下调整代码过滤掉这些误报:
a=[1 8;2 6;3 5;4 6];
N = size(a,1);
compare_matrix = cell2mat(arrayfun(@(ii) all(bsxfun(@(x,y) x>=y,a,a(ii,:)),2),1:N,'uni',false));
compare_matrix(1:N+1:N^2)=false; % set diagonal to false
dominated_idxs = any(compare_matrix,2);
a(dominated_idxs ,:) = [];