官术网_书友最值得收藏!

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]
主站蜘蛛池模板: 湘阴县| 新野县| 张北县| 泗洪县| 台州市| 任丘市| 古田县| 得荣县| 顺昌县| 靖西县| 桃园县| 奉化市| 米易县| 西乌珠穆沁旗| 靖边县| 临海市| 博爱县| 岑巩县| 莫力| 门源| 孝义市| 澄迈县| 南郑县| 保山市| 荃湾区| 通州区| 肇源县| 桦甸市| 石景山区| 台北市| 化州市| 松江区| 黄大仙区| 波密县| 泌阳县| 霍林郭勒市| 河北区| 丰宁| 松滋市| 永济市| 綦江县|