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
這個特性有時可以多加利用,但如果在程式中,一再利用這種擴充方式,可能會增加電腦之計算時間。實際上應用時,應加以考慮。
2 則留言:
老師您好
我在複習2.5節發現到 "矩陣次標" 這一段裡
有很多例子有提到C 矩陣
但發覺似乎和2.5節開頭出現的
C=
1 4 1 4
2 5 2 5
3 6 3 6
是不同的
會導致例題結果和上面不合
請老師幫忙看看 謝謝 :)
在矩陣之排序中,即使為二維矩陣,它仍有一定的排序順序。實際上其計數是以行為順序進行計數,以一個矩陣AA=[1 2 3;4 5 6;7 8 9] 為例,其AA(3,2)與AA(5)所指的位置是相同的,這點也可以由AA(1:9)得到印證:
其中AA(5) 應該改為AA(6)
張貼留言