从给定 id 的矩阵中删除行 - Matlab

Delete row from matrix given an id- Matlab

如何根据第 1 列的值从矩阵中删除特定行?

例如:A=[1 2 3;3 4 5;5 6 7] 第一列的值代表 ID,我想删除 ID 为 5 的行。 我已经知道 A(3,:)=[] 删除第三行,但是如果我有 id 并且不知道行号怎么办?

您可以使用 find:

id=5;
A(find(A(:,1)==id),:)=[]
A =

 1     2     3
 3     4     5

请注意,如 Divakar 所述,由于逻辑索引,您甚至可以省略 find:

A(3,:)

A(logical([0 0 1]),:)

等价于

A(find(A(:,1)==id),:)=[]

A(A(:,1)==id,:)=[]

会得到相同的结果。

如果你只有 id 这样的元素,那么我会选择 。但是,如果您碰巧有一个元素数组 id,您可以使用下面列出的方法之一。

方法 # 1(使用 ismember

A(ismember(A(:,1),ids),:) = [];

方法 # 2(使用 bsxfun

A(any(bsxfun(@eq,A(:,1),ids(:)'),2),:) = [];

如果 A 的第一列具有唯一性 ids,那么您还有两种方法可以使用。

方法 # 3(使用 intersect

[~,remove_rowid] = intersect(A(:,1),ids);
A(remove_rowid,:) = [];

方法 # 4(使用 setdiff

[~,select_rowid] = setdiff(A(:,1),ids,'stable');
A = A(select_rowid,:);