《多维阵列》PPT课件.ppt
MATLAB 程式設計第11章 多維陣列,張智星jangcs.nthu.edu.twhttp:/www.cs.nthu.edu.tw/jang清大資工系 多媒體檢索實驗室,11-1 多維陣列的定義,在 MATLAB 的資料型態中,向量可視為一維陣列,矩陣可視二維陣列,對於維度(Dimensions)超過 1 的陣列則均可視為多維陣列(Multidimesional Arrays,簡稱 N-D Arrays)。,二維陣列(I),二維陣列又簡稱矩陣,具有兩個維度(Dimensions)橫列(Row)直行(Column),直行,橫列,二維陣列(II),二維陣列,可對應至一個 X-Y 二維平面座標,圖示如下:,Y(行),X(列),三維陣列(I),將兩個二維陣列疊在一起,就形成第三個維度,此第三個維度稱為頁(Page),圖示如下:,頁,行,頁,列,三維陣列(II),三維陣列,可對應至一個 X-Y-Z 三維立體座標,圖示如下:,Z(頁),Y(行),X(列),三維陣列(III),三維陣列定址,可以(列,行,頁)定之。以維度為 342 的三維陣列為例,其定址方式可圖示如下:陣列 A 是三維陣列,其中 A(:,:,1)代表第一頁的二維陣列,A(:,:,2)代表第二頁的二維陣列。,四維陣列,四維陣列的第四個維度可視為箱(Box),而每個箱是由一個三維陣列所組成,其定址方式為(列,行,頁,箱)。一個 2235 的四維陣列,可表示成 5 個箱,每個箱都由一個 223 的三維陣列所組成,圖示如下:可類推至 n 維陣列,n 為任意自然數。,11-2 多維陣列的建立,建立一個簡單的多維陣列,可直接由 MATLAB 指令視窗內輸入 範例11-1:mDim01.m,A=1 0 2 5;4 1 8 7;3 2 6 3;A(:,:,2)=3 5 4 1;2 6 2 1;4 2 3 0,A(:,:,1)=1 0 2 5 4 1 8 7 3 2 6 3A(:,:,2)=3 5 4 1 2 6 2 1 4 2 3 0,多維陣列直接設定 範例11-2(I),上例是先建立一個二維陣列 A,再輸入第二頁的二維陣列 A(:,:,2),逐頁輸入二維陣列的內容,即可建立三維陣列。如果直接設定某一個新頁的一個元素值,此時MATLAB 會將此頁其他未指定之元素直接設定為 0,範例如下:,多維陣列直接設定 範例11-2(II),範例11-2:mDim02.m,A=1 0 2 5;4 1 8 7;3 2 6 3;A(:,:,2)=3 5 4 1;2 6 2 1;4 2 3 0;A(2,1,3)=5,A(:,:,1)=1 0 2 5 4 1 8 7 3 2 6 3A(:,:,2)=3 5 4 1 2 6 2 1 4 2 3 0,A(:,:,3)=0 0 0 0 5 0 0 0 0 0 0 0,純量展開功能(Scalar Expansion)(I),MATLAB 第五版新增純量展開(Scalar Expansion)功能,直接設定一個純量給多維陣列的一頁。承接上述範例,若要將陣列 A 的第二頁所有元素設為 7,可輸入:,A(:,:,2)=7,純量展開功能(Scalar Expansion)(II),A(:,:,2)=7 A(:,:,1)=1 0 2 5 4 1 8 7 3 2 6 3A(:,:,2)=7 7 7 7 7 7 7 7 7 7 7 7A(:,:,3)=0 0 0 0 5 0 0 00 0 0 0,垂直並排多維陣列範例11-3(I),對於較複雜的多維陣列,可用 cat 指令來建立,其功能為並排數個陣列,並可指定並排時所用的維度其指令格式如下:Z=cat(dim,A,B,C)A、B、C 為陣列dim 是將 A、B、C 合併時所用到的維度。,垂直並排多維陣列範例11-3(II),欲將矩陣 A 與 B 上下(垂直)並排範例11-3:cat01.m,A=1 2;3 4;B=1 0;0 1;Z=cat(1,A,B)%數字 1 表示將陣列 A 與 B 上下垂直並排,Z=1 2 3 4 1 0 0 1,水平並排多維陣列範例11-4,欲將陣列 A 與 B 左右(水平)並排範例11-4:cat02.m,A=1 2;3 4;B=1 0;0 1;Z=cat(2,A,B)%數字 2 表示將陣列 A 與 B 左右水平並排,Z=1 2 1 0 3 4 0 1,陣列堆疊 範例11-5,將陣列 A 與 B 疊起來,得到一個三維陣列範例11-5:cat03.m,A=1 2;3 4;B=1 0;0 1;Z=cat(3,A,B)%數字3表示將陣列 A 與 B 重疊排成三維陣列,Z(:,:,1)=1 2 3 4Z(:,:,2)=1 0 0 1,cat自動補齊維度 範例11-6,所設定的 dim 值比陣列 A、B、C的各自原先的維度數(Dimensionality)還要超出 2 或更多,MATLAB 會自動補上大小為 1 的維度此時陣列 Z 的維度變為 2212 範例11-6:cat04.m,A=1 2;3 4;B=1 0;0 1;Z=cat(3,A,B)%數字 4 表示將陣列 A 與 B 放在相鄰的兩箱,Z(:,:,1,1)=1 3 2 4,Z(:,:,1,2)=1 2 1 1,亂數陣列(I),MATLAB 可產生特殊用途的多維陣列 要產生一個維度是 235 的亂數陣列,可用 rand 指令,A=rand(2,3,5)A(:,:,1)=0.3412 0.7271 0.8385 0.5341 0.3093 0.5681A(:,:,2)=0.3704 0.5466 0.6946 0.7027 0.4449 0.6213,亂數陣列(II),類似的指令,詳見本書第九章矩陣的處理與運算的第二節特殊用途矩陣,A(:,:,3)=0.7948 0.5226 0.1730 0.9568 0.8801 0.9797A(:,:,4)=0.2714 0.8757 0.1365 0.2523 0.7373 0.0118A(:,:,5)=0.8939 0.2987 0.2844 0.1991 0.6614 0.4692,11-3 多維陣列的數學運算,許多用於向量和矩陣的數學運算,例如 sum、max、min、mean 等,也都可以用在多維陣列。在使用這些指令時,我們必須指定這些指令的操作是在哪一個維度。,多維陣列運算 維度指定範例11-7(I),範例11-7:sum01.m,A=1 1 1 1;2 2 2 2;3 3 3 3;B=0 0 0 0;1 1 1 1;1 2 3 4;Z=cat(3,A,B);%將矩陣 A,B 疊成一個三維陣列S=sum(Z,1)%根據第一維度來對元素進行相加,S(:,:,1)=6 6 6 6S(:,:,2)=2 3 4 5ans=1 4 2,多維陣列運算 維度指定範例11-7(II),上述範例,矩陣 Z 的大小是 342,sum(Z,1)是根據第一個維度來進行相加,因此第一個維度值就會被被壓成是 1,因此 size(S)所傳回的值是 1,4,2,代表矩陣 S 的大小是 142sum(Z)的預設相加維度即是 1,因此 sum(Z)和 sum(Z,1)所得到的結果是一樣的。,多維陣列運算 維度指定範例11-8(I),對第二個維度進行相加,可見下列範例。範例11-8:sum02.m,A=1 1 1 1;2 2 2 2;3 3 3 3;B=0 0 0 0;1 1 1 1;1 2 3 4;Z=cat(3,A,B);%將矩陣 A,B 疊成一個三維陣列S=sum(Z,2)%根據第二維度來對元素進行相加,S(:,:,1)=4 8 12,多維陣列運算 維度指定範例11-8(II),在上述範例中,sum(Z,2)是對第二個維度進行相加運算,因此所傳回的矩陣 S 的維度是 312。,S(:,:,2)=0 4 10ans=3 1 2,sum的累加 範例11-9(I),如果所要相加的維度只有單一維度,那麼 sum 指令會對下一個維度進行相加的動作,sum(sum(Z)將會得到三維陣列 Z 的每一頁的總和。,sum的累加 範例11-9(II),範例11-9:sumSum01.m與 sum 類似的指令還有 max、min、mean、median、mode、std、diff、sort 等,可以參考第九章的第三小節矩陣的數學運算。,A=1 1 1 1;2 2 2 2;3 3 3 3;B=0 0 0 0;1 1 1 1;1 2 3 4;Z=cat(3,A,B);%將矩陣 A,B 疊成一個三維陣列S=sum(sum(Z),S(:,:,1)=24S(:,:,2)=14,