【问题标题】:Fetching a subset of array in the prescribed order按规定顺序获取数组的子集
【发布时间】:2018-02-19 21:44:02
【问题描述】:

我有一个主数组和一个查询数组:-

master_array=[2;5;3;7;1];
query_array=[1;3];

查询数组的所有元素都将是主数组的成员。这是一条规则。我必须按照主数组的规定找到查询数组的所有元素的顺序。

我可以天真地这样做:-

a=[];
for i=query_array'
a=[a;i,find(master_array==i)];
end
a=sortrows(a,2);
order_array=a(:,1);

有更有效的解决方案吗?

【问题讨论】:

    标签: arrays matlab sorting


    【解决方案1】:

    你可以使用intersect:

    order_array = intersect(master_array, query_array, 'stable');
    

    或者你可以使用ismember:

    order_array = master_array(ismember(master_array, query_array));
    

    【讨论】:

      【解决方案2】:

      此解决方案在我的基准测试中花费的时间几乎减少了 70%:

      [~,idx] = ismember(master_array,query_array);
      order_array = query_array(idx(idx > 0));
      

      有关ismember函数的更多信息,请参考Matlab官方文档的this page

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-11-23
        • 2020-02-16
        • 1970-01-01
        • 1970-01-01
        • 2011-06-22
        • 2020-03-03
        • 1970-01-01
        • 2019-05-10
        相关资源
        最近更新 更多