选择第一列值在列表中至少出现一次的行

Selecting rows whose first column value appears at least once in a list

假设:

A = [1,22,33; 2,44,55; 2,66,77]
id = [2 3 5]

我正在尝试 select 所有矩阵 A 行,如果它们的第一列的值至少出现在 id 中一次,而不使用循环。

因此,从:

A =

 1    22    33
 2    44    55
 2    66    77

在这个例子中我想得到以下内容:

2    44    55
2    66    77

执行此操作更简单的方法是什么? 非常感谢。

使用 ismember 创建一个逻辑索引,该索引将 select 行:

A(ismember(A(:,1), id),:)

或者,您可以使用 any and bsxfun(@eq, ...) 而不是 ismember

A(any(bsxfun(@eq, A(:,1).', id(:)), 1), :)

或者,从 Matlab 版本 R2016b 开始,由于 implicit singleton expansion:

,您可以将 bsxfun(@eq, ...) 替换为 ==
A(any(A(:,1).'==id(:), 1), :)