MATLAB 对行进行排序
本教程将讨论使用 MATLAB 中的 sortrows()
函数对矩阵中存在的行进行排序。在数据分析和处理中,排序是必不可少的,因为它可以使数据在排序时易于分析和处理。
例如,如果我们有一张医院的病人表,我们想找到一个特定的人,如果该表没有排序,我们将不得不遍历所有数据才能找到一个人。但是如果表格按照患者姓名的首字母排序,我们可以很容易地看到这个人,因为现在我们只需要查看从特定字母开始的姓名即可。
在 MATLAB 中使用 sortrows()
函数对矩阵行进行排序
我们可以使用 Matlab 的 sortrows()
函数对矩阵中存在的行进行排序。sortrows()
函数的第一个语法如下:
output = sortrows(matrix)
上述语法将根据第一列的元素或每行的第一个元素按升序对给定矩阵中的行进行排序。如果两行或多行具有相同的第一个元素,该函数将比较它们的第二个元素,依此类推。
例如,让我们使用上述语法对矩阵中的行进行排序。请参阅下面的代码。
clc
clear
My_matrix = [5:10;2:7;3:8]
New_matrix = sortrows(My_matrix)
输出:
My_matrix =
5 6 7 8 9 10
2 3 4 5 6 7
3 4 5 6 7 8
New_matrix =
2 3 4 5 6 7
3 4 5 6 7 8
5 6 7 8 9 10
我们在上面的代码中创建了一个 3×6 矩阵并对其行进行了排序。我们可以比较输出中的两个矩阵来检查结果。
如果我们查看 My_matrix
矩阵的第一列,我们可以看到第二行将排在最前面,因为第二行的第一个元素是最小的,而第一个值最大的第一行将排在最后输出。我们可以在 sortrows()
函数中传递任意大小的矩阵。
sortrows()
函数的第二种语法如下:
output = sortrows(matrix, column)
我们可以使用上面的语法来设置输入矩阵的列号,这将用于对给定矩阵中存在的行进行排序。如果我们不传递列号,该函数将使用矩阵的第一列对行进行排序。
我们还可以在一个向量中传递多个列号,该函数将根据第一个列号对行进行排序。如果当前列中存在两个或多个相同的值,则函数将移动到给定向量中存在的下一个列号。
例如,让我们使用第二列和第三列对矩阵的行进行排序。请参阅下面的代码。
clc
clear
My_matrix = [5:10;3:8;7:-1:2]
New_matrix = sortrows(My_matrix,[3 4])
输出:
My_matrix =
5 6 7 8 9 10
3 4 5 6 7 8
7 6 5 4 3 2
New_matrix =
7 6 5 4 3 2
3 4 5 6 7 8
5 6 7 8 9 10
如果我们查看 New_matrix
矩阵的第三列和第四列,我们可以看到第三列和第四列的元素已排序。如果我们只传递具有相同值的单个列号,该函数将不会更改行的位置。
sortrows()
的第三种语法如下所示。
output = sortrows(matrix, column, direction)
在上面的语法中,方向将定义我们想要对行进行排序的顺序,例如 ascend
表示行的升序,descend
表示行的降序。默认情况下,顺序设置为升序。
在多个列号的情况下,我们还可以添加多个方向作为将用于每一列的单元格数据类型。
例如,如果我们定义两个列号和两个方向,则第一列将按照第一个方向进行排序。如果有相同的值,该函数将移动到第二列并根据第二个方向对行进行排序。
例如,让我们按照两个方向对上面的矩阵进行排序。请参阅下面的代码。
clc
clear
My_matrix = [5:10;3:8;7:-1:2]
New_matrix = sortrows(My_matrix,[3 4],{'ascend' 'descend'})
输出:
My_matrix =
5 6 7 8 9 10
3 4 5 6 7 8
7 6 5 4 3 2
New_matrix =
3 4 5 6 7 8
7 6 5 4 3 2
5 6 7 8 9 10
在上面的输出中,当函数到达第三列中存在的两个相同的值,即 5 时,它将移动到第四列,并使用 6 和 4 的值并按降序对它们进行排序,因为方向为第二列编号是递减的。现在让我们谈谈使用 sortrows()
函数对表中的行进行排序。
在 MATLAB 中使用 sortrows()
函数对表行进行排序
我们还可以使用 sortrows()
函数对表格的行进行排序,就像我们对上面矩阵的行进行排序一样。我们还可以设置要用于排序的变量或列以及排序的方向或顺序。
例如,让我们创建一个表并根据变量对其行进行排序。请参阅下面的代码。
clc
clear
P_Name = {'Smith';'John';'Will';'Jones';'Brown'};
P_Age = [37;47;37;40;49];
P_Height = [72;68;63;67;64];
P_table = table(P_Age,P_Height,'RowNames',P_Name)
Sorted_table = sortrows(P_table,'P_Height','descend')
输出:
P_table =
5×2 table
P_Age P_Height
_____ ________
Smith 37 72
John 47 68
Will 37 63
Jones 40 67
Brown 49 64
Sorted_table =
5×2 table
P_Age P_Height
_____ ________
Smith 37 72
John 47 68
Jones 40 67
Brown 49 64
Will 37 63
在上面的代码中,我们创建了一个患者表,包括他们的姓名、年龄和身高,我们根据患者的身高降序对表进行排序。我们可以在输出中看到,表格是按照患者身高的降序排列的。
我们还可以使用多个变量和方向进行排序,就像在矩阵的情况下一样。在多个变量的情况下,我们必须在一个单元格中传递变量和方向名称。
默认情况下,sortrows()
函数将使用所有变量和升序对给定表的行进行排序。我们还可以使用 RowNames
参数代替变量名,根据它们的名称对行进行排序。
如果我们在表格中有缺失的展示位置,并且想要根据缺失的展示位置对表格进行排序,我们可以使用 MissingPlacement
参数。之后,我们可以传递它的值,如 first
将缺失值放在首位,last
将值放在末尾,auto
将元素按升序排列在最前面,在降序的情况下将元素放在最后。
我们还可以使用 ComparisonMethod
参数更改用于比较值的方法。之后,我们必须传递方法的名称,如实数值的 real
、复数值的 abs
和 auto
,在实数输入的情况下将使用实数值,在复杂输入的情况下使用复数值.
比较方法在复杂值的情况下很有帮助。例如,如果我们只想比较复数值的实部,我们可以使用 real
方法,如果我们希望取复数值的绝对值,我们可以使用 abs
方法。
我们还可以从 sortrows()
函数获取索引,该函数显示输入矩阵或表的行的重新排列。上述属性的语法如下所示。
[Sorted_table, index] = sortrows(P_table,'RowNames','MissingPlacement','last','ComparisonMethod','abs')
如果我们想从输入矩阵或表中对特定数量的行进行排序,我们必须将它们存储在单独的矩阵或表中,然后使用 sortrows()
函数并将结果存储回原始表或矩阵中。查看此链接以获取有关 sortrows()
函数的更多详细信息。