2011-06-14 205 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