gpt4 book ai didi

matlab - 在 MATLAB 中保留非支配元素并省略其余元素的最快方法是什么?

转载 作者:行者123 更新时间:2023-12-04 18:15:56 25 4
gpt4 key购买 nike

例如 [2 , 5]支配[3 , 8]原因 (2 < 3) 和 (5 < 8)

但是 [2 , 5]不占优[3 , 1]导致虽然 (2 < 3) 但是 (5 > 1) 所以这两个向量是非支配的

现在例如假设我有一个这样的矩阵:

a =[ 1 8;
2 6;
3 5;
4 6];

这里前三个是非支配的,但最后一个是由(3,5)支配的,我需要一个可以省略它并给我这个输出的代码:
ans =

[ 1 8;
2 6;
3 5]

请注意,Nx2 矩阵中可能有很多非支配元素

最佳答案

  • 使用 bsxfun 将一行与其他行进行比较
  • 使用 arrayfun 对每一行执行此操作(或者如果您愿意,可以使用循环)并将输出转换回具有 cell2mat
  • 的矩阵
  • 使用 anyall检查哪些行被支配
  • 删除这些行

  • 代码:
    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 ,:) = [];

    关于matlab - 在 MATLAB 中保留非支配元素并省略其余元素的最快方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11718295/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com