对矩阵的两列进行排序,同时在 OCTAVE/MATLAB 中保持一列完整

Sorting two columns of a matrix while keeping one intact in OCTAVE/MATLAB

我有这个矩阵:

data=[1 5402783   1   
      2 43359352  2   
      3 26118700  3   
      4 33091887  4   
      5 890931    5   
      6 826897    6   
      7 1188749   7   
      8 1239861   8];

我需要第一列保持原样,对第二列(按降序排列)和 'keep along' 第三列的值进行排序。如果我使用 sort(data) 它会对所有 3 列进行排序。

我试过:

[~,idx]=sort(data(:,2),'descend');  
data=data(idx,:) 

但显然是错误的

输出应该是:

[1   43359352          2  
 2   33091887          4  
 3   26118700          3  
 4    5402783          1  
 5    1239861          8  
 6    1188749          7  
 7     890931          5  
 8     826897          6]  

您需要做的就是在最后将未排序和已排序的部分重新组装数据矩阵:

data = [1 5402783  1
        2 43359352 2
        3 26118700 3
        4 33091887 4
        5 890931   5
        6 826897   6
        7 1188749  7
        8 1239861  8];

[~,idx] = sort(data(:,2),'descend');
data = [data(:,1),data(idx,2:3)];