10/22/2006

5.2多維陣列

5.2Multi-Dimensional Arrays


一般的矩陣多探討兩維。三維陣列雖僅增加一個維數,但型式就複雜許多。二維陣列以行、列表示,故在標示上,僅有兩個下標,如A(3,4)即為列3行4的表示法。若增加一維,則必須再增一個下標位置。而其所代表的意義變成另一層,而不是行列的觀念,增加之層次通常以頁數(pages)表示之。故A(3,4,1)變為第一頁,而A(3,4,2)為第二頁。其前兩標仍維持二維之行列觀念,故A(3,4,1)表示第一頁第三列第四行之元素,而A(3,4,2)表示第二頁第三列第四行之元素。

若要指出第一頁或第二頁所有的元素,則可以使用冒號代表。如A(:,:,1)、A(:,:,2)是。

>>A(:,:,1)=[1 2 3;4 5 6;7 8 9]; %第一頁輸入,結果不顯示
>>A(:,:,2)=magic(3) %第二頁輸入,並顯示整個矩陣之結果
>>A(:,:,1) =
1 2 3
4 5 6
7 8 9

>>A(:,:,2) =
8 1 6
3 5 7
4 9 2

輸入第一頁時其頁數可以省略,處理其餘頁數時則必須標明。通常要觀察一個多維矩陣之維數,可用ndims或size函數,只是兩個結果之表示法略有不同,例如:

>>ndims(A)
ans = 3

>>size(A)
ans = 3 3 2

多維矩陣之形成,亦可利用另一個函數cat(dim, C, D,…)進行增減,cat又稱為串接指令,可以將許多小矩陣依dim維度之安排進行組合。dim參數即表示所要做的矩陣維數。當dim=1時,表示產生一個[C;D]疊加的行向矩陣;dim=2時,則產生一個[C D]疊加的列向矩陣;而dim=3時,則產生一個分別由C與 D各佔一頁的三維矩陣。例如:

>>c=[1 2;3 4], d=[5 6;7 8]
c =
1 2
3 4
d =
5 6
7 8

>>cat(1,c,d)
ans =
1 2
3 4
5 6
7 8

>>cat(2,c,d)
ans =
1 2 5 6
3 4 7 8


>>cat(3,c,d)
ans(:,:,1) =
1 2
3 4

ans(:,:,2) =
5 6
7 8


在組成多頁之多維系統時,基本上其大小應一致,否則無法搭配。以下面之列為例,在第三維中,其二維之大小必須相同:

>>A=cat(3,[9 2;6 5],[7 1;2 8])

A(:,:,1) =
9 2
6 5

>>A(:,:,2) =
7 1
2 8

>>A=cat(3,[9 2 4;6 5 3],[7 1 2;2 8 4])
A(:,:,1) =
9 2 4
6 5 3

A(:,:,2) =
7 1 2
2 8 4

>>B=cat(3,[3 5;0 1; 1 4],[5 6;2 1;2 8])
B(:,:,1) =
3 5
0 1
1 4

>>B(:,:,2) =
5 6
2 1
2 8


若三維仍然不足,必須增加為四維時,則必須增加一個表示第四維之下標。在置放時,其第三維除非特別說別,均設為1,而其餘矩陣則依第四維之順序置入,亦即所輸入之資料是置於第三維之第一頁中:

>>C=cat(4,[4 2;6 5],[5 8;8 2])
C(:,:,1,1) =
4 2
6 5

C(:,:,1,2) =
5 8
8 2

>>C=cat(4,[1 2 5;4 5 7],[7 8 0;3 2 9])
C(:,:,1,1) =
1 2 5
4 5 7

>>C(:,:,1,2) =
7 8 0
3 2 9

若M與N為兩三維矩陣,今擬置於另一四維矩陣中時,其結果如下:

>>D=cat(4,A,B,cat(3,[1 2;3 4],[4 3;2 1]))
>> A=cat(3,[1 1;2 2],[3 3 ; 4 4])
A(:,:,1) =
1 1
2 2
A(:,:,2) =
3 3
4 4
>> B=cat(3,[11 22;33 44],[44 44;55 55])
B(:,:,1) =
11 22
33 44
B(:,:,2) =
44 44
55 55
>> D=cat(4,A,B,cat(3,[7 7; 8 8],[ 9 9; 2 2]))
D(:,:,1,1) =
1 1
2 2
D(:,:,2,1) =
3 3
4 4
D(:,:,1,2) =
11 22
33 44
D(:,:,2,2) =
44 44
55 55
D(:,:,1,3) =
7 7
8 8
D(:,:,2,3) =
9 9
2 2


其中,D(:,:,:,1)是置放M矩陣;D(:,:,:,2)是置放N矩陣;而D(:,:,:,3)則置放後面所串接之矩陣,其維數可以檢測如下:

>>ndims(C) = 4
ans = 4

要取出其中之陣列應用時,必須在整數的指標指到其對應之陣列,例如:第四層中之第二頁、第三層中之第二頁之第一列第二行為:

>>D(1,2,2,2)
ans = 6

>>D(1,2,2,3)
ans = 3

>>D(1,2,1,2)
ans = 5

為方便起見,超過二維之多維部份亦可用指標向量指向其頁數矩陣:

>>k=D(:,:,1,[1 3])
k(:,:,1,1) =
9 2
6 5

k(:,:,1,3) =
1 2
3 4