我有類似這樣的一個矩陣:如何比較的排在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
出現在它上面。
我該怎麼做?
我有類似這樣的一個矩陣:如何比較的排在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
出現在它上面。
我該怎麼做?
假設爲了不去除行沒關係,你可以結合SORT和UNIQUE這樣的:
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
將保留最後的重複條目,這似乎符合您的要求。
非常感謝! – 2011-03-15 14:42:09
哦。非常好。比較而言,我是痛苦的。 (顯然我不能投我自己的意見。) – Ricky 2011-03-15 14:44:07
我認爲問題的本質是秩序無關緊要。然後,您可以將較小的數字存儲在第一列中並查找重複的行。 This question對此有一些建議。這條線將執行排序,因此引用的方法將工作:
x = [min(x(:,1),x(:,2)),max(x(:,1),x(:,2))]
如果有兩個條目(i,j)會怎麼樣?他們是否也應該被刪除? – Jonas 2011-03-15 14:35:29
是的,這將會膨脹! – 2011-03-15 20:58:58
好。我的解決方案將爲你做到這一點。 – Jonas 2011-03-15 21:01:08