【发布时间】:2019-01-04 09:04:24
【问题描述】:
我将选择数据集的一些行,索引列表除外。
例如,在给定的data_set 中,我想选择除idx = [2,3,6,11,15] 之外的所有行。
我们如何在 MATLAB 中做到这一点?有没有命令或逻辑索引方法?
【问题讨论】:
标签: arrays matlab matrix indexing
我将选择数据集的一些行,索引列表除外。
例如,在给定的data_set 中,我想选择除idx = [2,3,6,11,15] 之外的所有行。
我们如何在 MATLAB 中做到这一点?有没有命令或逻辑索引方法?
【问题讨论】:
标签: arrays matlab matrix indexing
通过将排除列表与来自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, : ) = [];
错误处理
请注意,如果排除列表中的任何行超出范围(例如,如果 0 在 idx 中),最后的行删除方法将产生错误。
setdiff 和 ismember 方法不会给您任何错误,idx 中存在越界值只是多余的。
【讨论】: