【问题标题】:How can I sort a 2-D array in MATLAB with respect to 2nd row?如何在 MATLAB 中对第二行的二维数组进行排序?
【发布时间】:2010-08-14 10:45:14
【问题描述】:

我有数组说“a”

一个=

 1     4     5
 6     7     2

如果我使用函数 b=排序(a)

给出答案

b =

 1     4     2
 6     7     5

但我想要类似的回答

b =

 5     1     4
 2     6     7

意思是第 2 行应该被排序,但是第 1 行的元素应该保持不变并且应该对应于第 2 行。

【问题讨论】:

    标签: sorting matlab


    【解决方案1】:

    排序(a',2)'

    把它分开:

    a =  1     4     5
         6     7     2
    
    a' = 1 6
         4 7
         5 2
    
    sortrows(a',2) = 5 2
                     1 6
                     4 7
    
    sortrows(a',2)' = 5 1 4
                      2 6 7
    

    这里的关键是 sortrows 按指定的行排序,其他的都按照它的顺序。

    【讨论】:

      【解决方案2】:

      您可以只在第二行使用SORT 函数,然后使用索引输出对整个数组进行排序:

      [junk,sortIndex] = sort(a(2,:));
      b = a(:,sortIndex);
      

      【讨论】:

      • junk 可以替换为:[~, sortIndex] 这在 MATLAB 的新版本中更简洁
      • 不幸的是,它非常不向后兼容,当您为使用稍旧版本的 Matlab 的用户编写代码时可能会非常尴尬。
      【解决方案3】:

      怎么样

      a = [1 4 5; 6 7 2]
      a =
           1     4     5
           6     7     2
      >> [s,idx] = sort(a(2,:))
      s =
           2     6     7
      idx =
           3     1     2
      >> b = a(:,idx)
      b =
           5     1     4
           2     6     7
      

      换句话说,您使用sort 的第二个参数来获得您想要的排序顺序,然后将其应用于整个事物。

      【讨论】:

        猜你喜欢
        • 2022-01-10
        • 2011-10-25
        • 2013-08-17
        • 2010-09-13
        • 1970-01-01
        • 2013-09-13
        • 1970-01-01
        • 2012-04-03
        相关资源
        最近更新 更多