9/27/2006

2.5 矩陣的分合與定址

矩陣疊加



此外利用幾個行向量或列向量相搭配,也可以湊出另一個新的矩陣。以A矩陣為例,可以自我疊加,或與其他同大小的矩陣疊加:

>>A=[1 2 3;4 5 6];

>>B=[A;A]

B =
1 2 3
4 5 6
1 2 3
4 5 6

>> C=[A' A']

C =
1 4 1 4
2 5 2 5
3 6 3 6

>> D=[A' A';B']

D =
1 4 1 4
2 5 2 5
3 6 3 6
1 4 1 4
2 5 2 5
3 6 3 6

結果,B為4x3大小之矩陣;C為3x4大小之矩陣。後者之A必須先行轉置,才能進行合併。

矩陣次標



要指出某矩陣中之元素,或取出運用必須有一套方法,通常就其位置在第幾列第幾行呼之,如:

>>A(2,3)

ans = 6

>>[A(1,3) A(2,2) A(1,2)]

ans = 3 5 2


所以利用這種直接呼叫的方式,也可以另組一個新的矩陣,但仍必須加中括號規範之。若所要取出的元素是鄰近的位置,則可用n1:n2之表示法,以上述之C矩陣為例:

>>C(3,2:4)

ans = 6 3 6

所取到的是C矩陣第三列第二、三、四行的元素。若要取得其中之全行,則僅使用冒號(:),前後不加數字即可,如取A之第一列轉置再與C之第二、三行合併成D矩陣:

>>D=[A(1,:)' C(:,2:3)]

D =
1 4 1
2 5 2
3 6 3


如此形成另一個3x3的矩陣。如果所選取的行或列並不相鄰,則可以用中括號將所要的行或列直接列舉,如將C矩陣中之第一、三、五行抽出成立E矩陣:


>> E=C(:,[1,3,4])
E =
1 1 4
2 2 5
3 3 6

此外,空矩陣也是一個常用的矩陣,實際上其內並不含任何元素,它常以[ ]表示。如果矩陣中某一行或列被此空矩陣取代,表示將該行或該列將被刪除。

>>E(2:3,:)=[]

E = 1 1 4

此時之E矩陣由於二及三列被取代為空矩陣,故只剩下孤單單的一個列矩陣了。

在矩陣之排序中,即使為二維矩陣,它仍有一定的排序順序。實際上其計數是以行為順序進行計數,以一個矩陣AA=[1 2 3;4 5 6;7 8 9] 為例,其AA(3,2)與AA(5)所指的位置是相同的,這點也可以由AA(1:9)得到印證:

>>AA =
1 2 3
4 5 6
7 8 9

>>AA(3,2)

ans = 8

>>AA(6)

ans = 8

>>AA(1:9)

ans =
1 4 7 2 5 8 3 6 9

因此,從這個表示法可以找到一個共通點,即使用二維向量也可用一維表示。通常可以用AA(:)代表其全部的元素位置。但AA(:)執行之結果會是行向量,經轉置後,結果如下:

>>AA(:)'

ans =
1 4 7 2 5 8 3 6 9

不過要記得,由二維矩陣轉為一維矩陣,其順序並非列向量的排法,而是先排行向量,將來在應用時必須注意。一個矩陣亦可由不同的區塊矩陣組成,例如:上述之A為[3 x 3]矩陣,加上其他可以組成另一個 [6x4] 之B矩陣:

>> A=[1 2 3;4 5 6;7 8 9]
A =
1 2 3 4 5 6 7 8 9

>> B = [A, zeros(3,1); 4*ones(3,3), [1;2;3]]

B =
1 2 3 0
4 5 6 0
7 8 9 0
4 4 4 1
4 4 4 2
4 4 4 3

再次請特別注意,矩陣中之”;”表示置於下一列,而”,”表示接續於下一行之意。

矩陣之重組



若要重排原來矩陣之型式,可以利用reshape函數,其第二及三個參數即為要改變之大小:

>> d=reshape(B,3,8)

d =
1 4 2 4 3 4 0 1
4 4 5 4 6 4 0 2
7 4 8 4 9 4 0 3

>> d=reshape(B,8,3)

d =
1 8 4
4 4 4
7 4 0
4 4 0
4 3 0
4 6 1
2 9 2
5 4 3

>> d=reshape(B,4,6)

d =
1 4 8 3 4 0
4 4 4 6 4 1
7 2 4 9 0 2
4 5 4 4 0 3

無論如何改變,注意其順序係先取行向,逐行取盡。若非此種取向,則B矩陣需先行轉置。

下面的例子為利用reshape之函數組成新矩陣AA之例子:

>> AA =reshape(1:9,3,3)

AA =
1 4 7
2 5 8
3 6 9

若將其中對角線之元素累加,則得:

>> AA(1,1)+AA(2,2)+AA(3,3)

ans = 15

若相取出某一項超出矩陣範圍的元素時,程式會發出錯誤的信息:

>> AA(2,4)??? Index exceeds matrix dimensions.

但是也將矩陣之特定元素更換其值,例如:

>> AA(1,1)=10

AA =
10 4 7
2 5 8
3 6 9

第一項之值即單獨改變。但若將某值給予超出矩陣的位置時,矩陣倒可以隨機應變,增加其大小,其餘未有給值的元素一律給零,例如:

>> AA(2,4)=10

AA =
10 4 7 0
2 5 8 10
3 6 9 0

這個特性有時可以多加利用,但如果在程式中,一再利用這種擴充方式,可能會增加電腦之計算時間。實際上應用時,應加以考慮。