今天带来Matlab中,在给定矩阵数组中使用sortrows函数来实现按照行来排序的方法。本文,主要包括sortrows函数常见用法、sortrows函数用法说明、sortrows函数实例等。其中,本文提供的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
在指定列中具有相等元素的行(例如,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,:)。
对表的行排序
按变量值升序对表的行进行排序。
创建一个包含四个变量的表格,列出五个人的患者信息。
>> 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进行排序。
按行名称对表的行排序
创建一个包含四个变量的表格,列出五个人的患者信息。
>> 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函数按行名升序对行进行排序。
按变量对表的行排序
创建一个包含四个变量的表格,列出五个人的患者信息。
>> 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
原创文章,作者:古哥,转载需经过作者授权同意,并附上原文链接:https://iymark.com/articles/3890.html