2011-03-15 52 views
1

我有類似這樣的一個矩陣:如何比較的排在MATLAB

1468 1468 

1468 1711 

1468 1469 

1711 1468 

1711 1711 

1711 1469 

1469 1468 

1469 1711 

1469 1469 

,我想刪除當且僅當該條目中的條目(I,J)(J,I)的存在。例如,我想刪除1711 1468,因爲1468 1711出現在它上面。

我該怎麼做?

+0

如果有兩個條目(i,j)會怎麼樣?他們是否也應該被刪除? – Jonas 2011-03-15 14:35:29

+0

是的,這將會膨脹! – 2011-03-15 20:58:58

+0

好。我的解決方案將爲你做到這一點。 – Jonas 2011-03-15 21:01:08

回答

4

假設爲了不去除行沒關係,你可以結合SORTUNIQUE這樣的:

m = [1468 1468 
1468 1711 
1468 1469 
1711 1468 
1711 1711 
1711 1469 
1469 1468 
1469 1711 
1469 1469] 

[~,v]=unique(sort(m,2),'rows'); 

trimmedM = m(sort(v),:) %# keep the row ordering as in the original 

trimmedM = 
     1468  1468 
     1711  1468 
     1711  1711 
     1469  1468 
     1469  1711 
     1469  1469 

注意unique將保留最後的重複條目,這似乎符合您的要求。

+0

非常感謝! – 2011-03-15 14:42:09

+0

哦。非常好。比較而言,我是痛苦的。 (顯然我不能投我自己的意見。) – Ricky 2011-03-15 14:44:07

0

我認爲問題的本質是秩序無關緊要。然後,您可以將較小的數字存儲在第一列中並查找重複的行。 This question對此有一些建議。這條線將執行排序,因此引用的方法將工作:

x = [min(x(:,1),x(:,2)),max(x(:,1),x(:,2))]