如何从依赖于第一列值矩阵中删除某一行?
例如: A=[1 2 3;3 4 5;5 6 7]
其中,所述第一列的值表示ID和欲删除具有5作为ID的行。 我已经知道, A(3,:)=[]
删除第三行,但如果我有ID和不知道的行数?
如何从依赖于第一列值矩阵中删除某一行?
例如: A=[1 2 3;3 4 5;5 6 7]
其中,所述第一列的值表示ID和欲删除具有5作为ID的行。 我已经知道, 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
,那么我会去@ yoh.lej的解决方案 。 但是,如果你碰巧有元素的数组id
,您可以使用下面列出的方法之一。
方法一(有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,:);