12-1 }C堨

異質陣列中的每一個元素,可以看成是一個抽屜或盒子(Cell),用來儲存各種不同型態的 MATLAB 資料,例如:前幾章已介紹過的字串、矩陣、多維陣列,或是下一章即將介紹的結構陣列等各種不同型態的資料。

Hint
Cell Arrays 照英文字面翻譯應該是「盒子陣列」或是「胞陣列」,但是其意義並不明顯。因此筆者在此將其翻譯為「異質陣列」,取其陣列各個構成元素可以包含「不同性質的資料型態」的意義。

有三種方式可以用來建立異質陣列,分別是 Cell Indexing、Content Indexing、及使用大括號 {} 等方法,以下逐一舉例說明之。

我們可針對異質陣列中各個構成元素,直接一一加以設定,此種建立異質陣列的方法通稱為 「Cell Indexing」,例如:

Example 1: 12-異質陣列/cell01.mA(1,1) = {'This is the first cell.'}; A(1,2) = {[5+j*6 , 4+j*5]}; A(2,1) = {[1 2 3; 4 5 6; 7 8 9]}; A(2,2) = {{'Tim'; 'Chris'}} A = 'This is the first cell.' [1x2 double] [3x3 double] {2x1 cell }

在上例中,建立了一個異質陣列 A,其維度為 2×2,由四個具有不同資料型態的元素所構成,其中 A(1,1) 是一個字串 ‘This is the first cell.’, A(1,2) 是一個維度為 1×2 的複數陣列 [5+j*6, 4+j*5],A(2,1) 是一個維度為 3×3 的實數陣列 [1 2 3; 4 5 6; 7 8 9],而 A(2,2) 則存放另一個異值陣列,此陣列是由字串所構成: {‘Tim’, ‘Chris’}。異質陣列 A 的內容可以圖示如下:

另一建立異質陣列的方法,稱為 Content Indexing,以下使用此法來建立一個與前述相同的異質陣列 A:

Example 2: 12-異質陣列/cell02.mA{1,1} = 'this is the first cell.'; A{1,2} = [5+j*6, 4+j*5]; A{2,1} = [1 2 3; 4 5 6; 7 8 9]; A{2,2} = {'Tim'; 'Chris'} A = 'this is the first cell.' [1x2 double] [3x3 double] {2x1 cell }

根據筆者的經驗,Content Indexing 是一個比較好記的方法,只需將矩陣 indexing 所用的小括號改成大括號即可。可比較如下:

第三種建立異質陣列的方法,是直接使用大括號 {} 將所有元素內容一次設定完成,舉例如下:

Example 3: 12-異質陣列/cellConcat01.mA = {'James Bond', [1 2;3 4;5 6]; pi, magic(5)} B = {rand(3), randperm(4); eps, 'NTU'} C = [A B] % 將異質陣列 A 及 B 左右並排 A = 'James Bond' [3x2 double] [ 3.1416] [5x5 double] B = [3x3 double] [1x4 double] [2.2204e-16] 'NTU' C = 'James Bond' [3x2 double] [3x3 double] [1x4 double] [ 3.1416] [5x5 double] [2.2204e-16] 'NTU'

在上述範例中,我們使用 C = [A B] 來合併兩個異質陣列,以建立一新異質陣列,此方式與合併一般陣列的方法完全相同。
MATLAB程式設計:入門篇