我有一个矩阵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
使用 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
另一种方法是不调用任何函数:
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.
A = A(A(:,1) ~= A(:,2),:)
来删除矩阵元素,因为使用=[]
的方法可能效率较低:https://dev59.com/xWjWa4cB1Zd3GeqPqnFx - Dan