【问题标题】:How to select rows of a matrix except of a list of indices如何选择除索引列表之外的矩阵行
【发布时间】:2019-01-04 09:04:24
【问题描述】:

我将选择数据集的一些行,索引列表除外。

例如,在给定的data_set 中,我想选择除idx = [2,3,6,11,15] 之外的所有行。

我们如何在 MATLAB 中做到这一点?有没有命令或逻辑索引方法?

【问题讨论】:

    标签: arrays matlab matrix indexing


    【解决方案1】:

    通过将排除列表与来自1:n 的完整列表进行比较,有多种方法可以做到这一点,其中n 是行数。下面我列出了 2 个使用这种逻辑的。我还展示了最简单的方法(删除行),但这需要一个中间步骤。

    我不确定其中哪个性能更好:

    % Setup
    idx = [2,3,6,11,15]; % exclusion list
    M = rand( 25, 10 );  % test matrix to index (25 rows)
    

    使用ismember 和逻辑索引

    K = M( ~ismember( 1:size(M,1), idx ), : );
    

    使用setdiff获取未列出的行号

    K = M( setdiff( 1:size(M,1), idx ), : );
    

    创建一个临时矩阵,然后删除排除的行

    K = M;
    K( idx, : ) = [];
    

    错误处理

    请注意,如果排除列表中的任何行超出范围(例如,如果 0idx 中),最后的行删除方法将产生错误。

    setdiffismember 方法不会给您任何错误,idx 中存在越界值只是多余的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-13
      • 2022-01-25
      • 1970-01-01
      • 2014-11-27
      相关资源
      最近更新 更多