从给定 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,:);
如何根据第 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,:);