• 沒有找到結果。

第十二章

N/A
N/A
Protected

Academic year: 2022

Share "第十二章"

Copied!
8
0
0

加載中.... (立即查看全文)

全文

(1)

多維陣列

本 章 重 點

MATLAB 第四版只支援一維陣列(即向量)及二 維陣列(即矩陣) ,但自從 MATLAB 第五版之後,

開始支援數種新的資料型態,包含多維陣列、異質

陣列、及結構陣列。本章及隨後數章將一一介紹這

些 新 的 資 料 型 態 。 善 用 這 些 資 料 型 態 , 您 的

MATLAB 程式將會變成百米選手的短褲—又快又

短喔!

(2)

MATLAB 程式設計與應用

12-1 多維陣列的定義

在 MATLAB 的資料型態中,向量可視為一維陣列,矩陣可視二維陣 列,對於維度超過 1 的陣列則均可視為多維陣列(Multidimesional Arrays,簡稱 N-D Arrays),以下分別以二維陣列、三維陣列、及四 維陣列說明之。

二維陣列有兩個維度(Dimensions),分別是「橫列(Row)」與「直 行(Column)」,或分別簡稱為「列」與「行」,可以 (列,行)為 之。以 維度為 3 個橫列及 4 個直行(表示為 3×4)的二維陣列為例,

其定址方式可圖示如下:

前述的二維陣列,可對應至一個 x - y 二維平面座標,圖示如下:

(1,1) (1,2) (1,3) (1,4) (2,1) (2,2) (2,3) (2,4) (3,1) (3,2) (3,3) (3,4)

直行

橫 列

Y(行)

X(列)

(3)

將二維陣列逆時鐘旋轉 90 度,即可得到類似於一般 x - y 二維平面座標的表示 法。

在 MATLAB 中,可將兩個二維陣列疊在一起,就形成第三個維度,

此第三個維度稱為「頁」(Page),圖示如下:

前述的三維陣列,可對應至一個 x - y - z 三維立體座標,,圖示如下:

Z(頁)

Y(行) X(列)

頁 (1,1) (1,2) (1,3) (1,4) (2,1) (2,2) (2,3) (2,4) (3,1) (3,2) (3,3) (3,4) (1,1) (1,2) (1,3) (1,4)

(2,1) (2,2) (2,3) (2,4)

(3,1) (3,2) (3,3) (3,4) 頁 列

(4)

MATLAB 程式設計與應用

因此對於三維陣列定址,可以(列,行,頁)為之。以維度為 3×4×2 的 三維陣列為例,其定址方式可圖示如下:

上例中,陣列 A 是三維陣列,其中 A(:,:,1)代表第一頁的二維陣列,

A(:,:,2)代表第二頁的二維陣列。

四維陣列的第四個維度可稱為「箱」(Box),而每一箱是由一個三 維陣列所組成,其定址方式可以(列,行,頁,箱)為之。舉例來說,一 個 2×2×3×5 的四維陣列,可表示成 5 個箱,每一個箱都是由一個 2

×2×3 的三維陣列所組成,圖示如下:

由此可類推至 n 維陣列,n 為任意自然數。

(5)

入,例如:

>> 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 3 A(:,:,2) =

3 5 4 1 2 6 2 1 4 2 3 0

在上例中,是先建立一個二維陣列 A ,再輸入第二頁的二維陣列 A(:,:,2) ,依此方式逐頁輸入二維陣列的內容,即可建立三維陣列。

亦可只輸入一個元素,MATLAB 會將未指定之部分直接設定為 0 ,例 如:

>> A(2,1,3) = 5 A(:,:,1) =

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(:,:,3) =

0 0 0 0 5 0 0 0

(6)

MATLAB 程式設計與應用

我們也可以使用 MATLAB 第五版新增的純量展開(Scalar Expansion)

的功能,直接設定一個純量給多維陣列的一頁,例如:欲將陣列 A 的 第二頁的所有元素設為 7,可輸入:

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

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

7 7 7 7 7 7 7 7 7 7 7 7 A(:,:,3) =

0 0 0 0 5 0 0 0 0 0 0 0

對於較複雜的多維陣列,可用 cat 指令來建立,其功能為「並排」數 個陣列,並可指定「並排」時所用的維度,其指令格式如下:

   Z = cat(dim, A, B, C… )

其中 A、B、C 為陣列,dim 是將 A、B、C… 合併時所用到的維度。

例如:欲將矩陣 A 與 B 上下(垂直)並排,可輸入:

>> 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

(7)

1 2 1 0 3 4 0 1

若欲將陣列 A 與 B 疊起來,以得到一個三維陣列,可輸入:

>> Z = cat(3, A, B) % 數字 3 表示將陣列 A 與 B 重疊排成三維陣列 Z(:,:,1) =

1 2 3 4 Z(:,:,2) = 1 0 0 1

若 所 設 定 的 dim 值 比 陣 列 A 、 B 、 C… 的 各 自 原 先 的 維 度 數

(Dimensionality)還要超出 2 或更多,則 MATLAB 會自動補上大小 為 1 的維度,例如:

>> Z = cat(4, [1 3; 2 4], [1 2; 1 1]) Z(:,:,1,1) =

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

此時陣列 Z 的維度變為 2×2×1×2。

MATLAB 亦可產生特殊用途的多維陣列,例如:若要產生一個維度是 2×3×5 的亂數陣列,可用 rand 指令:

>> A = rand(2, 3, 5)

(8)

MATLAB 程式設計與應用

A(:,:,1) =

0.3412 0.7271 0.8385 0.5341 0.3093 0.5681 A(:,:,2) =

0.3704 0.5466 0.6946 0.7027 0.4449 0.6213 A(:,:,3) =

0.7948 0.5226 0.1730 0.9568 0.8801 0.9797 A(:,:,4) =

0.2714 0.8757 0.1365 0.2523 0.7373 0.0118 A(:,:,5) =

0.8939 0.2987 0.2844 0.1991 0.6614 0.4692

類似的指令,還有 randn、ones、zeros 等用來產生特殊用途的矩陣,

詳見本書第十章「矩陣的處理與運算」的第二節「特殊用途矩陣」。

參考文獻

相關文件

受方便學處品第十八 次說釋百字生品第十九 次百字果相應品第二十 次真言百字位成品第二十一 次百字成就持誦品第二十二

第五 第五章 章 章 章 工作時間、 工作時間、 工作時間、請假 工作時間、 請假 請假 請假、休假 、休假 、休假 、休假. 第二十 條 司機輪值出車勤務時,連續工作 4 小時,至少有

[r]

Nonstiff Solver ode15s Numerical differentiation formulas(NDFS) Stiff Solver ode23s Modified Rosenbrock formula of order 2 Stiff Solver ode23t Trapezoidal rule with

本書總共分成六個章節: 〈第一章、擁有自信〉 ; 〈第二章、設定願景〉 ; 〈第三章、掌握行動力〉 ; 〈第四 章、建立人際關係〉 ;

 “original equipment manufacturing”乃契約製造的 一種,通常是指委託廠商將設計好的圖樣、規 格、零件、半成品或成品,委託另一廠商生

[r]

假設我們的觀察資料是美國自 1790 至 1990 年(以 10 年為一單位)的 總人口,此資料可由載入檔案 census.mat 得到,如下:. >> load census.mat