我有一个矩阵 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
我有一个矩阵 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
另一种不调用任何函数的方法:
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.
一种方法使用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