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

1.7 cell

MATLAB中的cell類型(元胞數(shù)組)是一個(gè)承載其他數(shù)據(jù)類型的容器,它可以包含任何MATLAB類型的數(shù)據(jù),如數(shù)值、字符和句柄等,甚至其他cell數(shù)據(jù)。使用cell類型可以輕松實(shí)現(xiàn)復(fù)雜數(shù)據(jù)的嵌套。

1.7.1 實(shí)例15:兩種常見的cell賦值方式

例64:創(chuàng)建空cell。

例65:對(duì)上例C中的每個(gè)元素依次賦值。

賦值通常有兩種方式:第一種,等式左側(cè)用圓括號(hào)取cell元素并將等式右側(cè)的cell數(shù)據(jù)賦給左側(cè);第二種,等式左側(cè)用花括號(hào)取cell的元素值并將等式右側(cè)的數(shù)據(jù)值賦給左側(cè)。

繼續(xù)對(duì)C(2,2)中的2×2空cell賦值:用花括號(hào)先取得C{2,2}中的值2×2 cell之后,用“(1)”取出第一個(gè)子cell并用等號(hào)賦值為cell數(shù)據(jù){a}。

>>C{2,2}(1)={a};

或者可采取第二種賦值方式:用花括號(hào)先取得C{2,2}中的值2×2 cell之后,用“{1}”取出第一個(gè)cell的值將此值賦為a

>>C{2,2}{1}=a

tips:取cell元素用圓括號(hào),取cell中元素的值用花括號(hào)。雙擊【工作區(qū)】的變量以打開變量編輯器查看或修改變量,如圖1-2所示。

圖1-2 通過變量編輯器查看cell元素

1.7.2 實(shí)例16:mat2cell函數(shù)與num2cell函數(shù)

mat2cell函數(shù)可以將矩陣元素分塊放置到cell中。

語法:

C=mat2cell(A,dim1Dist,…,dimNDist)

其中dim1Dist,…,dimNDist為向量,包含分隔的每個(gè)子cell在當(dāng)前維度1,…,N下的長度。>>CM=ones(5,4);

>>C=mat2cell(CM,[2,3],[2,2])

C=

[2x2 double] [2x2 double]

[3x2 double] [3x2 double]

變量C的拆分結(jié)構(gòu)如圖1-3所示。

圖1-3 矩陣轉(zhuǎn)cell的結(jié)構(gòu)拆分示意圖

例66:num2cell函數(shù)可將矩陣中每個(gè)元素放置到一個(gè)cell中。

>>D=num2cell(CM)

1.7.3 實(shí)例17:cellstr函數(shù)

例67:cellstr函數(shù)可以將字符矩陣行中最后的空白字符刪除。

例68:cellstr函數(shù)可將字符矩陣放到cell列向量中。

1.7.4 實(shí)例18:cell2mat函數(shù)

cell2mat函數(shù)可以將任意形狀的數(shù)值cell轉(zhuǎn)換為矩陣。

例69:將cell類型C轉(zhuǎn)換回矩陣。

>>cell2mat(C)

數(shù)據(jù)的結(jié)構(gòu)變化如圖1-4所示。

圖1-4 cell轉(zhuǎn)數(shù)字矩陣的結(jié)構(gòu)示意圖

例70:將包含字符串的cell轉(zhuǎn)為數(shù)值數(shù)組。

>>str2double({1212})

ans=

1 2

1 2

1.7.5 實(shí)例19:用cellfun函數(shù)做cell元素遍歷運(yùn)算

利用cellfun函數(shù)可以遍歷cell中的各個(gè)元素來進(jìn)行函數(shù)運(yùn)算。

語法:

cellfun(@fun,input)

例71:求cell中各元素的平均值。

tips:cellfun(@fun,input)中的fun函數(shù)句柄不僅限于系統(tǒng)內(nèi)置函數(shù),也可以使用自定義函數(shù)。

語法:

cellfun(@(x1,…,xN)fun,input1,…,inputN)

例72:求cell中元素的平均值。

例73:求2個(gè)cell中元素的和。

注意到輸出的OUT中第一個(gè)cell元素為1×3矩陣,第二個(gè)cell元素為3×1矩陣,第三個(gè)cell元素為空。三個(gè)cell的尺寸不同,需要將UniformOutput參數(shù)設(shè)置為false。

例74:將cell中元素a替換為b

tips:UniformOutput參數(shù)設(shè)置為false時(shí)返回cell類型,否則返回矩陣類型。

例75:判斷股票屬于上證(60開頭)還是深證A股(00或30開頭)并輸出。

1.7.6 實(shí)例20:用findgroups函數(shù)和splitapply函數(shù)做cell分組運(yùn)算

findgroups函數(shù)可以將cell按照指定列值進(jìn)行分組;splitapply則可以對(duì)分組進(jìn)行函數(shù)運(yùn)算。

例76:計(jì)算分組均值。

findgroups函數(shù)也支持?jǐn)?shù)值行或列向量的分組,如:

>>findgroups([1;1;2;2;2])

>>findgroups([1,1,2,2,2])

findgroups函數(shù)不支持字符格式的行或列向量,如findgroups([aab])會(huì)報(bào)錯(cuò),需要使用cellstr函數(shù)將輸入轉(zhuǎn)換為cell。

>>findgroups(cellstr([aab]))

主站蜘蛛池模板: 桑植县| 台北市| 六盘水市| 新蔡县| 当雄县| 栾川县| 陵川县| 天柱县| 乌海市| 县级市| 靖安县| 娱乐| 廉江市| 旅游| 南阳市| 宕昌县| 涟水县| 仪陇县| 峨山| 山东省| 和政县| 榆树市| 郸城县| 屯留县| 上犹县| 怀集县| 石屏县| 通渭县| 科技| 昌图县| 崇义县| 通许县| 民权县| 卢氏县| 集安市| 东城区| 阿拉善盟| 长治县| 依兰县| 垣曲县| 丰都县|