2013-11-01 72 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