matlab的cell數組

matlab的cell數組 (2010-04-06 15:19:42)轉載▼ 標籤: cell 元胞數組 教育 分類: matlab及perl學習 


元胞數組:


     元胞數組是MATLAB的一種特殊數據類型,可以將元胞數組看做一種無所不包的通用矩陣,或者叫做廣義矩陣。組成元胞數組的元素可以是任何一種數據類型的常數或者常量,每一個元素也可以具有不同的尺寸和內存佔用空間,每一個元素的內容也可以完全不同,所以元胞數組的元素叫做元胞(cell)。和一般的數值矩陣一樣,元胞數組的內存空間也是動態分配的。


      (1)元胞數組的創建


    


 >> a={'matlab',20;ones(2,3),1:10}


 a =


     'matlab'        [         20]
     [2x3 double]    [1x10 double]


 >> b=[{'matlab'},{20};{ones(2,3)},{1:10}]


 b =


     'matlab'        [         20]
     [2x3 double]    [1x10 double]


 >> c={10}


 c =


     [10]


 >> c(1,2)={2}


 c =


     [10]    [2]


 >> c(2,2)={5}


 c =


     [10]    [2]
       []    [5]


 >> isequal(a,b)


 ans =


      1


 >> whos
 Name      Size            Bytes Class      Attributes


 a         2x2               388 cell               
 ans       1x1                 1 logical            
 b         2x2               388 cell               
 c         2x2               208 cell  


 用cell函數創建元胞數組,創建的數組爲空元胞。cell函數創建空元胞數組的主要目的是爲數組預先分配連續的存儲空間,節約內存佔用,提高執行效率。   


 >> a=cell(1)


 a =


     {[]}


 >> b=cell(1,2)


 b =


      []     []


 >> c=cell(3,3)


 c =


      []     []     []
      []     []     []
      []     []     []


 >> d=cell(2,2,2)


 d(:,:,1) =


      []     []
      []     []


 d(:,:,2) =


      []     []
      []     []


 >> whos
 Name      Size             Bytes Class      Attributes


 a         1x1                  4 cell               
 ans       1x1                  1 logical            
 b         1x2                  8 cell               
 c         3x3                 36 cell               
 d         2x2x2               32 cell  


    (2)元胞數組的數據獲得


     從元胞數組中讀取數據,可保存爲一個標準的數組或一個新的單元數組,或取出數組進行計算。元胞數組中數據的訪問,可通過元胞內容的下標進行,用元胞數組名加大括號{}。大括號中數值表示元胞的下標。如a{1,2}表示元胞數組中第一行第二列的元胞。


 >> a={20,'matlab';ones(2,3),1:3}


 a =


     [        20]    'matlab'  
     [2x3 double]    [1x3 double]


 >> str=a(1,2)


 str =


     'matlab'


 >> class(str)


 ans =


 cell


 >> str=a{1,2}


 str =


 matlab


 >> class(str)


 ans =


 char


 ()和{}有着本質的區別,大括號用於表示元胞的內容,小括號表示指定的元胞。


 a =


     [        20]    'matlab'  
     [2x3 double]    [1x3 double]


 >> a{2,1}(2,2)


 ans =


     0.9134


 >> a{2,1}(2,3)


 ans =


     0.0975


 >> a{1,2}(2)


 ans =


 a


 使用元胞的下標,可將一個元胞數組的子集賦值給另一個變量,創建新的元胞數組。


 >> a=[{1},{2},{3};{4},{5},{6};{7},{8},{9}]


 a =


     [1]    [2]    [3]
     [4]    [5]    [6]
     [7]    [8]    [9]


 >> b=a(2:3,2:3)


 b =


     [5]    [6]
     [8]    [9]


 >> c=a(1:3,2:3)


 c =


     [2]    [3]
     [5]    [6]
     [8]    [9]


      本例使用元胞下標的方式創建了新的元胞數組b和c,通過結果看出b和c就是元胞數組a的一部分。


      (3)元胞數組的刪除和重塑


      要刪除單元數組中的行或列,可以用冒號表示單元數組中的行或列,然後對其賦一個空矩陣即可。


    


 a={20,'matlab';ones(2,3),1:3}


 a =


     [        20]    'matlab'  
     [2x3 double]    [1x3 double]


 >> a(1,:)=[]


 a =


     [2x3 double]    [1x3 double]


 >> a={20,'matlab';ones(2,3),1:3};
 >> a{1}=[]


 a =


               []    'matlab'  
     [2x3 double]    [1x3 double]


 >> a(1)=[]


 a =


     [2x3 double]    'matlab'    [1x3 double]


 >> a(2)=[]


 a =


     [2x3 double]    [1x3 double]


 >> a(1,2)=[]
 ??? A null assignment can have only one non-colon index.


 >> a(1)=[]


 a =


     [1x3 double]


      元寶數組和其他數組一樣,也可以通過reshape函數改變形狀,改變後的元胞數組與原元胞數組的元素個數相同,不能通過改變形狀來添加或刪除元胞數組中的元素。


    


 >> a=cell(4,4)


 a =


      []     []     []     []
      []     []     []     []
      []     []     []     []
      []     []     []     []


 >> size(a)


 ans =


      4     4


 >> b=reshape(a,2,8)


 b =


      []     []     []     []     []     []     []     []
      []     []     []     []     []     []     []     []


 >> size(b)


 ans =


      2     8


     


       (5)元胞數組中的操作函數


       cell:創建空的元胞數組


       cellfun:爲元胞數組的每個元胞執行指定的函數


       celldisp:顯示所有元胞的內容


       cellplot:利用圖形方式顯示元胞數組


       cell2mat:將元胞數組轉變成爲普通的矩陣


       mat2cell:將數值矩陣轉變成爲元胞數組


       num2cell:將數值數組轉變成爲元胞數組


       deal:將輸入參數賦值給輸出


       cell2struct:將元胞數組轉變成爲結構


       struct2cell:將結構轉變爲元胞數組


       iscell:判斷輸入是否爲元胞數組


     


     


 >> 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)


 b =


      1     1     0
      1     1     1


 >> c=cellfun('length',a)


 c =


      1     6     1
      3     3     1


 >> d=cellfun('isclass',a,'double')


 d =


      1     0     1
      1     1     1


 (函數的應用)


     cellfun函數的主要功能是對元胞數組的元素(元胞)分別指定不同的函數,不過,能夠在cellfun函數中使用的函數ushuliang是有限的。 


     能在cellfun中使用的函數:


     isempty:若元胞元素爲空,則返回邏輯真


     islogical:若元胞元素爲邏輯類型,則返回邏輯真


     isreal:若元胞元素爲實數,則返回邏輯真


     length:元胞元素的長度


     ndims:元胞元素的維數


     prodofsize:元胞元素包含的元素個數


     (7)元胞數組的嵌套


     元胞數組的元胞中包含其他的元胞數,稱爲嵌套元胞數組,沒有嵌套結構的元胞則稱爲頁元胞。使用嵌套的大括號或cell函數,或直接用賦值表達式,都可以創建嵌套單元數組,另外還可以訪問嵌套元胞數組的子數組、元胞或元胞的元素。


   


 >> a=cell(1,2)


 a =


      []     []


 >> a(1,2)={cell(2,2)}


 a =


      []    {2x2 cell}


     


       >> a(1,1)={magic(3)};
 a{1,2}(1,1)={[1 2 3;4 5 6;7 8 9]};
 a{1,2}(2,1)={[2-i;4+7i]};
 a{1,2}(2,2)={cell(1,2)};
 a{1,2}{2,2}(2)={5};
 >> cellplot(a)


       (8)元胞數組與數值數組間的轉化


       應用循環,可以將元胞數組轉化爲數值數組。
 引自:http://hi.baidu.com/hbwc/blog/item/a89ec511ab669a1bb8127b5c.html
發佈了19 篇原創文章 · 獲贊 23 · 訪問量 41萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章