选择第一列值在列表中至少出现一次的行
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), :)
假设:
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), :)