如何根据第1列值从矩阵中删除某一行?
例如:A=[1 2 3;3 4 5;5 6 7]
其中第一列的值表示id,我想删除具有5作为id的行。
我已经知道A(3,:)=[]
删除了第三行,但是如果我有id并且不知道行号怎么办?
答案 0 :(得分:1)
您可以使用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,:)=[]
会给出相同的结果。
答案 1 :(得分:1)
如果您只有id
元素,那么我会选择@yoh.lej's solution。但是,如果您碰巧有一个元素数组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,:);