2013-11-01 98 views
0

M是矩陣:M = [X Y Z]其中X,Y和Z是列向量。通過唯一列元素過濾矩陣

什麼是過濾M中的最簡單的方法,使得: 1-無元件每 柱2-行的順序保持(如果元件在一列中出現兩次重複的,那麼我想要刪除整個它出現的第二次行)

如:

M = [1 2 4; 
1 3 5; 
2 3 9] 

將成爲

Mf = [1 2 4; 
2 3 9] 

我試圖用[U,〜,IND ] =唯一(M,'行')具有重複一列中的一個元素的元素,但是該函數處理整行(如果該行只有一個元素被重複,則該行是唯一的)

回答

2

這是一個快速和骯髒的解決方案,只要你不太大,應該罰款。我已經在幾個矩陣上進行了測試,它似乎按預期工作。

count=1; 
for i=1:length(M(1,:))^2 
    [~,IA,~]=unique(M(:,count),'first'); 
    if length(IA)~=length(M(:,1)) 
     M=M(IA,:); 
     count=count-1; 
    end 
    count=count+1; 
    if count>length(M(:,1)) 
     break 
    end 
end 
M 
+0

+1。但是出於好奇,因爲已經接受了這個贊助人。對於M = [1 2 4; 1 3 5; 2 3 4]'它給出M = [1 2 4; 2 3 4]'。最後重複4。那是對的嗎? – Marcin

+0

@Marcin是的,你是正確的,我的代碼有一個嚴重的問題!我想我現在已經修好了,但不是很好。我相信有這樣做的更好方法。 – David