2021年6月9日 星期三

矩陣之排序

 矩陣之排序

源自於http://bime-matlab.blogspot.com/2006/09/29.html

矩陣中各元素之大小之排列與排序也是重要的操作。部份依需求而不同,有時需升冪排例(ascend),有時要降冪排列(descend),有時則只依其中某些行或某些列進行排列。排序之基本型式如下:


B = sort(A,dim)
B = sort(A,dim,mode)
[B,IX] = sort(A)

其中參數dim代表的意義與前面相同。dim=1時,是依行向排序;dim=2時,則是是依列向排序。前者為預設值,故不輸入亦可。參數mode則代表排列的方式,若mode='ascend'時為升冪排列;mode='decend'時為降冪排列,前者為預設值。設A之內容可利用亂數產生如下,先各乘以100再進行四捨五入:

>> A=round(rand(3,4)*100) A = 91 54 44 0 15 100 11 77 83 8 96 82

因此,A是一個3x4的矩陣。首先進行任意升幂排序:
>> sort(A)
ans =
    15     8    11     0
    83    54    44    77
    91   100    96    82
由其結果可以看出每一行都進行升冪排列,故所有的順序都改變了。

>> sort(A,1,'descend')
ans =
    91   100    96    82
    83    54    44    77
    15     8    11     0

現在以列向排序,並且採降冪排列:
>> sort(A,2,'descend') 
ans =
    91    54    44     0
   100    77    15    11
    96    83    82     8
此外,若還要知道原來元素移動之前的位置時,則可在函數左邊設定兩個輸出參數,前一項代表排序後的內容,後一項則為該元素在排序前所在的位置(行或列)。
>>[B,ix]=sort(A)

B =
    15     8    11     0
    83    54    44    77
    91   100    96    82

ix =
     2     3     2     1
     3     1     1     2
     1     2     3     3
如果要矩陣依某一行或某一列排序,其餘之行列元素則隨同移動,則可使用另一函數指令sortrows(A),其呼叫格式如下:
      B = sortrows(A,column)

>>[B,IX] = sortrows(A)

這個排序函數僅能依行,若要依列排序可先將A倒置。column代表所要排的那一行,如果不說明,則預設為第一行。其中B與IX之定義與sort函數相同,惟此處僅代表指定排序的那一行元素原先之位置。
>> [B,IX]=sortrows(A)

B =
    15   100    11    77
    83     8    96    82
    91    54    44     0

IX =
     2
     3
     1

沒有留言:

張貼留言

2024_09 作業3 以Node-Red 為主

 2024_09 作業3  (以Node-Red 為主  Arduino 可能需要配合修改 ) Arduino 可能需要修改的部分 1)mqtt broker  2) 主題Topic (發行 接收) 3) WIFI ssid , password const char br...