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()
函式的更多詳細資訊。