Matlab教程1_矩陣(數組) _ 元胞數組

元胞數組 數組

(做者:lcc)

    元胞數組是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 = spa

    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)元胞數組的刪除和重塑 class

要刪除單元數組中的行或列,能夠用冒號表示單元數組中的行或列,而後對其賦一個空矩陣便可。
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)元胞數組與數值數組間的轉化

      應用循環,能夠將元胞數組轉化爲數值數組。 效率

相關文章
相關標籤/搜索