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
4

2 回答 2

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.
于 2014-07-16T10:41:33.017 回答
4

一种方法使用diff-

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

对于一般NXM情况,其中M的列数在哪里A,可以将其扩展为 -

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

因此,如果你有

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
于 2014-07-16T10:32:00.283 回答