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

时间:2015-01-26 12:28:34

标签: matlab matrix row

如何根据第1列值从矩阵中删除某一行?

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

2 个答案:

答案 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,:);