源自於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
>> 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
現在以列向排序,並且採降冪排列:
這個排序函數僅能依行,若要依列排序可先將A倒置。column代表所要排的那一行,如果不說明,則預設為第一行。其中B與IX之定義與sort函數相同,惟此處僅代表指定排序的那一行元素原先之位置。
>> 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
沒有留言:
張貼留言