2011-06-14 154 views
2

是否可以使用排序功能实现与使用排序方式相同的功能。由于迭代,我的矩阵有超过400万行以上的行,并且导致很多延迟。 (一个矢量化的方法将不胜感激)在Matlab中进行排序与​​排序

%Col1 -> date, Col2 -> id, Col3 -> ranking within each date-group (to help you debug) 
data = [ ... 
     734614 5 3; 734615 6 5; 734622 1 1; 734615 1 1; 734615 4 3; 
     734622 2 2; 734622 4 3; 734615 3 2; 734615 5 4; 734614 3 2; 
     734614 1 1; 734622 8 4; 734622 9 5;] ; 

sortedanswer = 
    734614   1   1 
    734614   3   2 
    734614   5   3 
    734615   1   1 
    734615   3   2 
    734615   4   3 
    734615   5   4 
    734615   6   5 
    734622   1   1 
    734622   2   2 
    734622   4   3 
    734622   8   4 
    734622   9   5 

谢谢!

+0

只是为了澄清,你是排序第一列,然后是第二列相同的第一列值? – Phonon 2011-06-14 20:14:56

回答

1

你可以做到这一点作为

[~,indx]=sort(data(:,1)); 
sortedanswer=data(indx,:) 

sortedanswer = 

     734614   5   3 
     734614   3   2 
     734614   1   1 
     734615   6   5 
     734615   1   1 
     734615   4   3 
     734615   3   2 
     734615   5   4 
     734622   1   1 
     734622   2   2 
     734622   4   3 
     734622   8   4 
     734622   9   5 

注意,它是由在第一列的行进行排序。行的顺序与原始的data中的顺序相同,这就是为什么您在我的第一行的第二列和第三列中看到5 3的原因。

+0

谢谢尤达。是的,我知道但有可能以某种方式将其修改为实际需要的答案吗?相反,想象2个矩阵:mat1有1000行,mat2有4mil行。 mat2完美排序。我需要为某些cols实现ismember(mat1,mat2)。根据你的经验,保持mat1排序完美会提高ismember的速度吗?谢谢! – Maddy 2011-06-14 20:16:34

+1

@Maddy:如果你想这样,它会涉及一系列的排序。例如,首先排序,然后排序,然后排序第三等等,这是sortrows的功能。我不完全确定你是否可以对此作出重大改进,以便深入研究。 – abcd 2011-06-14 20:19:42

+0

谢谢尤达。嗯你是对的。我会继续使用sortrows。 – Maddy 2011-06-14 20:22:10