5.3 Cell數(shù)組的基本操作
本小節(jié)結(jié)合示例對元胞數(shù)組的一些基本操作進(jìn)行介紹。
【例3-26】 元胞數(shù)組的合并。
>> C1 = {'Jan' 'Feb'; '10' '17'; uint16(2004) uint16(2001)};
>> C2 = {'Mar' 'Apr' 'May'; '31' '2' '10'; ...
uint16(2006) uint16(2005) uint16(1994)};
>> C3 = {'Jun'; '23'; uint16(2002)};
>> C1
C1 =
'Jan' 'Feb'
'10' '17'
[2004] [2001]
>> C2
C2 =
'Mar' 'Apr' 'May'
'31' '2' '10'
[2006] [2005] [1994]
>> C3
C3 =
'Jun'
'23'
[2002]
>> C4 = {C1 C2 C3} % 生成嵌套元胞數(shù)組
C4 =
{3x2 cell} {3x3 cell} {3x1 cell}
>> C5 = [C1 C2 C3] % 生成元胞數(shù)組
C5 =
'Jan' 'Feb' 'Mar' 'Apr' 'May' 'Jun'
'10' '17' '31' '2' '10' '23'
[2004] [2001] [2006] [2005] [1994] [2002]
>> whos % 查看變量的結(jié)構(gòu)
Name Size Bytes Class Attributes
C1 3x2 696 cell
C2 3x3 1042 cell
C3 3x1 348 cell
C4 1x3 2422 cell
C5 3x6 2086 cell
【例3-27】 元胞數(shù)組的刪除。
本例在上例的基礎(chǔ)上進(jìn)行計(jì)算。
>> C5(:,3)=[] % 刪除元胞數(shù)組C5的第3列
C5 =
'Jan' 'Feb' 'Apr' 'May' 'Jun'
'10' '17' '2' '10' '23'
[2004] [2001] [2005] [1994] [2002]
5.4 Cell數(shù)組操作函數(shù)
和其他數(shù)組一樣,MATLAB也為元胞數(shù)組提供了一系列的操作函數(shù),對此進(jìn)行了簡要?dú)w納,如表3-7所示。
表3-7 元胞數(shù)組中的操作函數(shù)
函 數(shù)
說 明
函 數(shù)
說 明
cell
創(chuàng)建空的元胞數(shù)組
num2cell
將數(shù)值數(shù)組轉(zhuǎn)換為元胞數(shù)組
cellfun
對元胞數(shù)組的每個元胞執(zhí)行指定的函數(shù)
mat2cell
將數(shù)值矩陣轉(zhuǎn)換為元胞數(shù)組
celldisp
顯示所有元胞的內(nèi)容
cell2struct
將元胞數(shù)組轉(zhuǎn)換為結(jié)構(gòu)
cellplot
利用圖形方式顯示元胞數(shù)組
struct2cell
將結(jié)構(gòu)轉(zhuǎn)換為元胞數(shù)組
cell2mat
將元胞數(shù)組轉(zhuǎn)換為普通的矩陣
iscell
判斷輸入是否為元胞數(shù)組
【例3-28】 cellfun函數(shù)使用示例。
>> clear
>> a={20,'matlab',3-7i;ones(2,3),1:3,0}
a =
[ 20] 'matlab' [3.0000 - 7.0000i]
[2x3 double] [1x3 double] [ 0]
>> b=cellfun('isreal',a) % 判斷a中各元素是否是實(shí)數(shù)
b =
1 1 0
1 1 1
>> c=cellfun('length',a) % 查看a中各元素的長度
c =
1 6 1
3 3 1
>> d=cellfun('isclass',a,'double') % 判斷a中各元素是否是double型
d =
1 0 1
1 1 1
>> A = {1:10, [2; 4; 6], []};
>> averages = cellfun(@mean, A) % 將mean函數(shù)應(yīng)用于每一個元胞元素
averages =
5.5000 4.0000 NaN
>> [nrows, ncols] = cellfun(@size, A) % 將size函數(shù)應(yīng)用于每一個元胞元素
nrows =
1 3 0
ncols =
10 1 0
>> whos
Name Size Bytes Class Attributes
A 1x3 440 cell
a 2x3 788 cell
averages 1x3 24 double
b 2x3 6 logical
c 2x3 48 double
d 2x3 6 logical
ncols 1x3 24 double
nrows 1x3 24 double
從例子中可以看出,cellfun函數(shù)的主要功能是對元胞數(shù)組的元素(元胞)分別應(yīng)用不同的函數(shù),在這里前面四個函數(shù)的調(diào)用是通過直接用單引號括起來的文本來實(shí)現(xiàn)的,通過這種形式可以在cellfun函數(shù)中使用的函數(shù)數(shù)量是有限的,詳見表3-8。
如果用戶需要調(diào)用其他函數(shù)的話,那么就不能用文本作為輸入,而是用函數(shù)句柄進(jìn)行輸入。例如后面兩個例子。
表3-8能在cellfun中使用的函數(shù)
函 數(shù)
說 明
函 數(shù)
說 明
isempty
若元胞元素為空,則返回邏輯真
length
元胞元素的長度
islogical
若元胞元素為邏輯類型,則返回邏輯真
ndims
元胞元素的維數(shù)
isreal
若元胞元素為實(shí)數(shù),則返回邏輯真
prodofsize
元胞元素包含的元素個數(shù)
size
返回元胞元素的尺寸
isclass
元胞元素是否屬于某一類型
【例3-29】 顯示元胞數(shù)組內(nèi)容函數(shù)celldisp和cellplot使用示例。
本例在上例的基礎(chǔ)上演示函數(shù)celldisp和cellplot的使用方法。
>> celldisp(a) % 顯示元胞數(shù)組的所有元素
a{1,1} =
20
a{2,1} =
1 1 1
1 1 1
a{1,2} =
matlab
a{2,2} =
1 2 3
a{1,3} =
3.0000 - 7.0000i
a{2,3} =
0
>> cellplot(a) % 以圖片表示元胞數(shù)組的基本結(jié)構(gòu)
輸出圖形如圖3-5所示。
圖3-5 輸出圖形