MATLAB元胞數組

來源:互聯網
上載者:User

元胞數組:

   
元胞數組是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)元胞數組與數值數組間的轉化

      應用迴圈,可以將元胞數組轉化為數值數組。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.