Matlab数据处理之sortrows矩阵排序函数

4.7
(3)

今天带来Matlab中,在给定矩阵数组中使用sortrows函数来实现按照行来排序的方法。本文,主要包括sortrows函数常见用法、sortrows函数用法说明、sortrows函数实例等。其中,本文提供的sortrows实例主要包括:矩阵行排序、单元格数组的行排序、对表的行排序、按行名称对表的行排序、按变量对表的行排序。

Matlab数据处理之sortrows矩阵排序函数

sortrows函数帮助文档:

>> doc sortrows
>> help sortrows
 sortrows Sort rows in ascending order.
    Y = sortrows(X) sorts the rows of the matrix X in ascending order as a
    group. X is a 2-D numeric or char matrix. For a char matrix containing
    strings in each row, this is the familiar dictionary sort.  When X is
    complex, the elements are sorted by ABS(X). Complex matches are further
    sorted by ANGLE(X).  X can be any numeric or char class. Y is the same
    size and class as X.
 
    sortrows(X,COL) sorts the matrix based on the columns specified in the
    vector COL.  If an element of COL is positive, the corresponding column
    in X will be sorted in ascending order; if an element of COL is negative,
    the corresponding column in X will be sorted in descending order. For 
    example, sortrows(X,[2 -3]) sorts the rows of X first in ascending order 
    for the second column, and then by descending order for the third
    column.
 
    [Y,I] = sortrows(X) and [Y,I] = sortrows(X,COL) also returns an index 
    matrix I such that Y = X(I,:).
 
    Notes
    -----
    sortrows uses a stable version of quicksort.  NaN values are sorted
    as if they are higher than all other values, including +Inf.

sortrows函数基本用法

B = sortrows(A)
B = sortrows(A,column)
[B,index] = sortrows(___)
tblB = sortrows(tblA)
tblB = sortrows(tblA,'RowNames')
tblB = sortrows(tblA,vars)
tblB = sortrows(tblA,mode)
tblB = sortrows(tblA,'RowNames',mode)
tblB = sortrows(tblA,vars,mode)
[tblB,index] = sortrows(tblA,___)

sortrows函数用法说明

B=sortrows(A)按第一列的升序对A的行进行排序。字符数组按照熟悉的字典顺序排序,使用ASCII值。当第一列具有相等的值时,排序行根据下一列进行排序,并对后续的相等值重复此行为。

B = sortrows(A,column)根据向量列中指定的列对矩阵A进行排序。此输入用于连续执行多个列排序。对于相等的值,将保留原始顺序。

[B,index]=sortrows(_)还使用前面的任何语法返回索引向量。索引向量满足B=A(索引,:)。

tblB=sortrows(tblA)按升序对表tblA的行进行排序,先是第一个变量,然后是第二个变量,依此类推。

tblB=sortrows(tblA,’RowNames’)按行名称排序。

tblB=sortrows(tblA,vars)按vars指定的变量排序。

tblB=sortrows(tblA,mode)和tblB=sortrows(tblA,’RowNames’,mode)按mode指定的顺序对tblA进行排序。mode值,“ascend”表示升序(默认),“descend”表示降序。

tblB=sortrows(tblA,vars,mode)使用mode指定排序顺序。mode可以是字符向量或字符向量的单元格数组,其中包含“ascend”(默认)或“descend”(降序)。

  • 当mode是字符向量时,sortrows按指定方向对vars中的所有变量进行排序。
  • 当mode是一个字符向量的单元格数组时,sortrows按vars中每个变量的指定方向排序。

[tblB,index]=sortrows(tblA,_)还返回索引向量index,这样tblB=tblA(index,:)。

sortrows函数实例

矩阵行排序

从任意矩阵A开始,对A行进行排序。

>> A = floor(gallery('uniformdata',[6 7],0)*100);
>> A(1:4,1) = 95;  A(5:6,1) = 76;  A(2:4,2) = 7;  A(3,3) = 73

A =

    95    45    92    41    13     1    84
    95     7    73    89    20    74    52
    95     7    73     5    19    44    20
    95     7    40    35    60    93    67
    76    61    93    81    27    46    83
    76    79    91     0    19    41     1

>> B = sortrows(A)

B =

    76    61    93    81    27    46    83
    76    79    91     0    19    41     1
    95     7    40    35    60    93    67
    95     7    73     5    19    44    20
    95     7    73    89    20    74    52
    95    45    92    41    13     1    84

当仅使用单个输入参数调用时,sortrows将排序基于矩阵的第一列。对于在特定列中具有相等元素的任何行(例如,此矩阵的a(1:4,1)),排序基于紧邻右侧的列(在本例中为a(1:4,2))。

当使用两个输入参数调用时,sortrows将排序完全基于第二个参数中指定的列。

根据第二列中的值对A行进行排序。

>> C = sortrows(A,2)

C =

    95     7    73    89    20    74    52
    95     7    73     5    19    44    20
    95     7    40    35    60    93    67
    95    45    92    41    13     1    84
    76    61    93    81    27    46    83
    76    79    91     0    19    41     1
Matlab数据处理之sortrows矩阵排序函数

在指定列中具有相等元素的行(例如,A(2:4,:),如果按列2对矩阵A进行排序)保持其原始顺序。

指定要排序的两列:第1列和第7列。

>> D = sortrows(A,[1 7])

D =

    76    79    91     0    19    41     1
    76    61    93    81    27    46    83
    95     7    73     5    19    44    20
    95     7    73    89    20    74    52
    95     7    40    35    60    93    67
    95    45    92    41    13     1    84

sortrows首先按列1排序,然后对列1中值相等的行按列7排序。

使用第4列中的值按降序对行进行排序。

>> [E,index] = sortrows(A, -4)

E =

    95     7    73    89    20    74    52
    76    61    93    81    27    46    83
    95    45    92    41    13     1    84
    95     7    40    35    60    93    67
    95     7    73     5    19    44    20
    76    79    91     0    19    41     1


index =

     2
     5
     1
     4
     3
     6

索引向量index描述了行的重新排列,使得E=A(index,:)。

单元格数组的行排序

创建一个6乘2的字符向量数组。

>> A = {'Germany' 'Lukas'; 'USA' 'William'; 'USA' 'Andrew'; ...
'Germany' 'Andreas'; 'USA' 'Olivia'; 'Germany' 'Julia'}

A = 

    'Germany'    'Lukas'  
    'USA'        'William'
    'USA'        'Andrew' 
    'Germany'    'Andreas'
    'USA'        'Olivia' 
    'Germany'    'Julia'  

结果是一个国家和名称列表。

对A行进行排序。

>> B = sortrows(A)

B = 

    'Germany'    'Andreas'
    'Germany'    'Julia'  
    'Germany'    'Lukas'  
    'USA'        'Andrew' 
    'USA'        'Olivia' 
    'USA'        'William'

结果是按照国家和名称的字母顺序排列的列表。

首先对国家进行排序,然后按降序对名称进行排序。

>> [C,index] = sortrows(A,[1 -2])

C = 

    'Germany'    'Lukas'  
    'Germany'    'Julia'  
    'Germany'    'Andreas'
    'USA'        'William'
    'USA'        'Olivia' 
    'USA'        'Andrew' 


index =

     1
     6
     4
     2
     5
     3

索引向量index描述了行的重新排列,使得C=A(index,:)。

Matlab数据处理之sortrows矩阵排序函数

对表的行排序

按变量值升序对表的行进行排序。

创建一个包含四个变量的表格,列出五个人的患者信息。

>> LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
>> Age = [38;43;38;40;49];
>> Height = [71;69;64;67;64];
>> Weight = [176;163;131;133;119];
>> BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

>> tblA = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)

tblA = 

                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Smith       38     71        176       124     93   
    Johnson     43     69        163       109     77   
    Williams    38     64        131       125     83   
    Jones       40     67        133       117     75   
    Brown       49     64        119       122     80  

对表的行进行排序。

>> tblB = sortrows(tblA)

tblB = 

                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Williams    38     64        131       125     83   
    Smith       38     71        176       124     93   
    Jones       40     67        133       117     75   
    Johnson     43     69        163       109     77   
    Brown       49     64        119       122     80   

sortrows函数首先通过变量Age按升序对行进行排序,然后通过变量Height进行排序。

Matlab数据处理之sortrows矩阵排序函数

按行名称对表的行排序

创建一个包含四个变量的表格,列出五个人的患者信息。

>> LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
>> Age = [38;43;38;40;49];
>> Height = [71;69;64;67;64];
>> Weight = [176;163;131;133;119];
>> BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

>> tblA = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)

tblA = 

                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Smith       38     71        176       124     93   
    Johnson     43     69        163       109     77   
    Williams    38     64        131       125     83   
    Jones       40     67        133       117     75   
    Brown       49     64        119       122     80   

按行名称对表的行进行排序,并返回索引向量,使tblB=tblA(index,:)。

>> [tblB,index] = sortrows(tblA,'RowNames')

tblB = 

                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Brown       49     64        119       122     80   
    Johnson     43     69        163       109     77   
    Jones       40     67        133       117     75   
    Smith       38     71        176       124     93   
    Williams    38     64        131       125     83   


index =

     5
     2
     4
     1
     3

sortrows函数按行名升序对行进行排序。

Matlab数据处理之sortrows矩阵排序函数

按变量对表的行排序

创建一个包含四个变量的表格,列出五个人的患者信息。

>> LastName = {'Smith';'Johnson';'Williams';'Jones';'Brown'};
>> Age = [38;43;38;40;49];
>> Height = [71;69;64;67;64];
>> Weight = [176;163;131;133;119];
>> BloodPressure = [124 93; 109 77; 125 83; 117 75; 122 80];

>> tblA = table(Age,Height,Weight,BloodPressure,'RowNames',LastName)

tblA = 

                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Smith       38     71        176       124     93   
    Johnson     43     69        163       109     77   
    Williams    38     64        131       125     83   
    Jones       40     67        133       117     75   
    Brown       49     64        119       122     80   

按高度按升序对表格的行进行排序,然后按权重按降序排序。此外,返回一个索引向量,使tblB=tblA(index,:)。

>> [tblB,index] = sortrows(tblA,{'Height','Weight'},{'ascend','descend'})

tblB = 

                Age    Height    Weight    BloodPressure
                ___    ______    ______    _____________

    Williams    38     64        131       125     83   
    Brown       49     64        119       122     80   
    Jones       40     67        133       117     75   
    Johnson     43     69        163       109     77   
    Smith       38     71        176       124     93   


index =

     3
     5
     4
     2
     1
Matlab数据处理之sortrows矩阵排序函数

共计3人评分,平均4.7

到目前为止还没有投票~

很抱歉,这篇文章对您没有用!

让我们改善这篇文章!

告诉我们我们如何改善这篇文章?

文章目录

原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/3890.html

(1)
微信公众号
古哥的头像古哥管理团队
上一篇 2022年12月25日 14:15
下一篇 2022年12月28日 19:22

你可能感兴趣的文章

发表回复

登录后才能评论
微信小程序
微信公众号