- MATLAB從基礎到精通
- 王薇編著
- 1945字
- 2019-01-01 12:47:29
2.5 元胞數組
元胞數組是由可以包括任何數據類型的元胞組成的數組。通過元胞數組的使用,可以在同一個變量中存儲不同數據類型的數據,給代碼的編寫帶來很大便利。
2.5.1 元胞數組的創建
元胞數組的創建方法主要有直接賦值法和函數法。直接賦值法是指直接在命令行中給元胞數組的每個元素賦值,或者使用大括號“{ }”創建元胞數組。函數法是指使用MATLAB提供的cell()函數創建元胞數組。
1.直接賦值法
元胞數組的直接賦值可以使用小括號“( )”括起元胞的下標,此時元胞中的內容需要使用大括號“{ }”括起來。如果使用大括號“{ }”括起元胞的下標時,元胞中的內容無須另加標點,與一般數組的元素輸入相同。這兩種方法的效果是一樣的,但要注意符號前后的配合。
使用大括號“{ }”創建元胞數組的方法類似于使用中括號“[ ]”生成一般的數組,行之間元素用分號“;”分隔,列之間的元素用逗號“,”或者空格分隔。
【例2.15】直接賦值法創建元胞數組。
%元胞下標使用小括號創建元胞數組 >> a{1,1}=8; >> a{1,2}='cell study'; >> a{2,1}=magic(3); >> a{2,2}=magic(3)>5; >> a a = [ 8] 'cell study' [3x3 double] [3x3 logical] %元胞下標使用大括號創建元胞數組 >> b(1,1)={8}; >> b(1,2)={'cell study'}; >> b(2,1)={magic(3)}; >> b(2,2)={magic(3)>5}; >> b b = [ 8] 'cell study' [3x3 double] [3x3 logical] %使用大括號“{ }”創建元胞數組 >> {8, 'cell study';magic(3),magic(3)>5} ans = [ 8] 'cell study' [3x3 double] [3x3 logical]
2.函數法
利用cell()函數生成元胞數組的過程,可以理解為是一個先利用函數對元胞內存空間預分配,然后對元胞中的元素進行賦值。Cell()函數的用法如下。
● x= cell(n):生成n×n的元胞數組x。
● x= cell(m,n)或者x = cell([m n]):生成m×n的元胞數組x。
● x = cell(m,n,p,...)或者x = cell([m n p…]):生成m×n×p的元胞數組x。
● x = cell(size(A)):生成與數據A具有相同大小的元胞數組x。
【例2.16】函數法創建元胞數組。
>> a=cell(2) %生成2×2的元胞數組a a = [] [] [] [] >> a={1,'c';2,cell(3)};%給生成的元胞數組賦值 >> a a = [1] 'c' [2] {3x3 cell}
2.5.2 元胞數組的訪問
MATLAB 7.0中對元胞數組的訪問提供了大括號和小括號兩種方式,其中大括號訪問的是元胞數組中元胞的內容,可以對元胞中的內容進行進一步的操作,而小括號訪問的是元胞數組的元胞,是個整體,無法對元胞中的具體數據進行操作。
1.利用大括號訪問元胞數組
利用大括號可以訪問到元胞數組內元素具體的內容,并可對其中的數據執行具體的操作。
【例2.17】利用大括號訪問元胞數組。
>> a={8, 'cell study';magic(3),magic(3)>5} %創建元胞數組 a = [ 8] 'cell study' [3x3 double] [3x3 logical] >> a{1,1} %訪問元胞數組的第1行第1列的元胞內容 ans = 8 >> a{2,1} %訪問元胞數組的第2行第1列的元胞內容 ans = 8 1 6 3 5 7 4 9 2 >> a{1,:} %訪問元胞數組的第1行中的所有元胞內容 ans = 8 ans = cell study >> a{:,2} %訪問元胞數組的第2列中的所有元胞內容 ans = cell study ans = 1 0 1 0 0 1 0 1 0 >> a{2,1}(2,2) %訪問元胞數組內元胞子數據的內容 ans = 5 >> a{1,1}+8 ans = 16
2.利用小括號訪問元胞數組
利用小括號訪問元胞數組是訪問元胞數組中元胞的整體,不可以訪問元胞數組中的具體元素運算。
【例2.18】利用小括號訪問元胞數組。
>> a={8, 'cell study';magic(3),magic(3)>5};%創建元胞數組 >> a(1,1) %訪問到元胞數組的元胞整體 ans = [8] >> a(1,1)+8 %不可以對元胞數組的元胞整體進行運算 ??? Function 'plus' is not defined for values of class 'cell'. Error in ==> plus at 14 builtin('plus', varargin{:});
2.5.3 元胞數組的顯示
MATLAB中提供了celldisp()和cellplot()函數用于顯示元胞數組。Celldisp()函數可以顯示元胞數組的具體內容,而cellplot()函數以圖形方式顯示元胞數組。函數的具體用法如下。
● celldisp(s):用于顯示元胞數組s中的具體內容。
● celldisp(s,name):以字符串name為元胞名,顯示元胞數組s中的具體內容。
● cellplot(s):以圖形化的方式顯示元胞數組s。
● cellplot(s,'legend'):以圖形化的方式顯示元胞數組s,同時顯示不同數據類型的顏色圖例標注。
【例2.19】元胞數組的顯示。
>> a={8, 'cell study';magic(3),magic(3)>5}; >> celldisp(a) %顯示元胞數組a中的具體內容 a{1,1} = 8 a{2,1} = 8 1 6 3 5 7 4 9 2 a{1,2} = cell study a{2,2} = 1 0 1 0 0 1 0 1 0 >> celldisp(a,'s') %以s為元胞數組名,顯示元胞數組a中的具體內容 s{1,1} = 8 s{2,1} = 8 1 6 3 5 7 4 9 2 s{1,2} = cell study s{2,2} = 1 0 1 0 0 1 0 1 0 >> cellplot(a) %以圖形化的方式顯示元胞數組的內容,如圖2.1所示。

圖2.1 以圖形化的方式顯示元胞數組
2.5.4 元胞數組的刪除
元胞數組的刪除主要是通過把需要刪除的元胞賦值為空來實現。通過大括號和小括號訪問元胞并將其置空,可以分別刪除元胞數組的內容或整體。
1.利用大括號刪除元胞數組的內容
利用大括號可以刪除元胞數組元胞內的具體內容,可以刪除單個元胞及其中的具體元素,但不可刪除一行或一列元胞數組內容。
【例2.20】利用大括號刪除元胞數組的內容。
>> a={8, 'cell study';magic(3),magic(3)>5}; >> a{1,1}=[]; %刪除元胞數組內單個元胞 >> a a = [] 'cell study' [3x3 double] [3x3 logical] >> a{2,1}=[]; %刪除元胞數組內單個元胞 >> a a = [] 'cell study' [] [3x3 logical] >> a{2,2}(1,:)=[]; %刪除元胞數組內單個元胞的具體元素 >> a a = [] 'cell study' [] [2x3 logical] >> a{1,:}=[] %不可以通過大括號刪除元胞數組的一行或一列元素 ??? Insufficient outputs from right hand side to satisfy comma separated list expansion on left hand side.Missing [] are the most likely cause.
2.利用小括號刪除元胞數組的元胞
利用小括號可以刪除元胞數組的元胞整體,可以刪除一行或一列的元胞,但不可以刪除其中具體的一個元胞。
【例2.21】利用小括號刪除元胞數組的內容。
>> a={8, 'cell study';magic(3),magic(3)>5}; >> a(1,1)=[]; %刪除單個元胞整體,出錯 ??? A null assignment can have only one non-colon index. >> a(1,:)=[]; %刪除元胞數組的一行 >> a a = [3x3 double] [3x3 logical] >> a(:,2)=[] %刪除元胞數組的一列 a = [3x3 double]
- 程序員面試筆試寶典(第3版)
- ClickHouse性能之巔:從架構設計解讀性能之謎
- 營銷數據科學:用R和Python進行預測分析的建模技術
- 運用后端技術處理業務邏輯(藍橋杯軟件大賽培訓教材-Java方向)
- Serverless computing in Azure with .NET
- C++從入門到精通(第6版)
- Java EE 7 with GlassFish 4 Application Server
- 零基礎看圖學ScratchJr:少兒趣味編程(全彩大字版)
- 深入理解Kafka:核心設計與實踐原理
- SAS編程演義
- Mastering Machine Learning with R
- Effective C++:改善程序與設計的55個具體做法(第三版)中文版(雙色)
- 從零開始學UI設計·基礎篇
- Processing開發實戰
- ASP.NET本質論