如何在矩阵中删除特定行

3

我有一个矩阵A,我想要删除具有相似值(1,1)(2,2)(3,3)的行。

A =
     1     1
     2     1
     3     1
     1     2
     2     2
     1     3
     3     3

所以矩阵会像这样:
 2     1
 3     1
 1     2
 1     3
2个回答

4

使用 diff 的一种方法 -

A(diff(A,[],2)~=0,:)

对于一般的NXM情况,其中MA的列数,可以将其扩展为-

A(any(diff(A,[],2)~=0,2),:)

因此,如果您拥有 <\p>
A= [1 1 1; 
    2 2 3; 
    3 1 4;
    8 1 2; 
    2 2 2; 
    1 3 1; 
    3 3 3]

您会获得 -
 2     2     3
 3     1     4
 8     1     2
 1     3     1

4

另一种方法是不调用任何函数:

 A = A(A(:,1) == A(:,2),:)

这种方法的效率相对于基于diff()的解决方案更高:

n = 10;
y = [round(rand(n,1)) round(rand(n,1))];

tic;
for i = 1:1e4
  A = y;
  A(diff(A,[],2)~=0,:);
end
toc
Elapsed time is 0.091990 seconds.

tic;
for i = 1:1e4
  A = y;
  A = A(A(:,1) == A(:,2),:);
end
toc
Elapsed time is 0.037842 seconds.



% Suggestion of @Dan in the comments
tic;
for i = 1:1e4
  A = y;
  A(A(:,1) == A(:,2),:) = [];
end
toc
Elapsed time is 0.147636 seconds.

1
或者使用A = A(A(:,1) ~= A(:,2),:)来删除矩阵元素,因为使用=[]的方法可能效率较低:https://dev59.com/xWjWa4cB1Zd3GeqPqnFx - Dan
为了兴趣和未来的访客,您应该在时间比较中包含原始内容。 - Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接