2014-07-16 26 views
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

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

基于 DIFF这种方法VS溶液的

效率()

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),:)'如'= []'方法可能效率低下:http://stackoverflow.com/questions/12421345/deleting-matrix-elements-by-vs-reassigning-matrix – Dan

+0

你是对的!谢谢! –

+0

你应该在你的时间比较为了利益和未来的访客 – Dan

4

使用一种方法diff -

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

对于一般NXM情况下,当MA列数,可以为扩大这一点 - 因此

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