MATLAB 对行进行排序

Ammar Ali 2023年1月30日
  1. 在 MATLAB 中使用 sortrows() 函数对矩阵行进行排序
  2. 在 MATLAB 中使用 sortrows() 函数对表行进行排序
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、复数值的 absauto,在实数输入的情况下将使用实数值,在复杂输入的情况下使用复数值.

比较方法在复杂值的情况下很有帮助。例如,如果我们只想比较复数值的实部,我们可以使用 real 方法,如果我们希望取复数值的绝对值,我们可以使用 abs 方法。

我们还可以从 sortrows() 函数获取索引,该函数显示输入矩阵或表的行的重新排列。上述属性的语法如下所示。

[Sorted_table, index] = sortrows(P_table,'RowNames','MissingPlacement','last','ComparisonMethod','abs')

如果我们想从输入矩阵或表中对特定数量的行进行排序,我们必须将它们存储在单独的矩阵或表中,然后使用 sortrows() 函数并将结果存储回原始表或矩阵中。查看此链接以获取有关 sortrows() 函数的更多详细信息。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook

相关文章 - MATLAB Matrix