元胞數組:
元胞數組是MATLAB的一種特殊數據類型,可以將元胞數組看做一種無所不包的通用矩陣,或者叫做廣義矩陣。組成元胞數組的元素可以是任何一種數據類型的常數或者常量,每一個元素也可以具有不同的尺寸和內存占用空間,每一個元素的內容也可以完全不同,所以元胞數組的元素叫做元胞(cell)。和一般的數值矩陣一樣,元胞數組的內存空間也是動態分配的。 (1)元胞數組的創建
>> a={'matlab',20;ones(2,3),1:10} a = 'matlab' [ 20] >> b=[{'matlab'},{20};{ones(2,3)},{1:10}] b = 'matlab' [ 20] >> c={10} c = [10] >> c(1,2)={2} c = [10] [2] >> c(2,2)={5} c = [10] [2] >> isequal(a,b) ans = 1 >> whos a 2x2 388 cell 用cell函數創建元胞數組,創建的數組為空元胞。cell函數創建空元胞數組的主要目的是為數組預先分配連續的存儲空間,節約內存占用,提高執行效率。 >> a=cell(1) a = {[]} >> b=cell(1,2) b = [] [] >> c=cell(3,3) c = [] [] [] >> d=cell(2,2,2) d(:,:,1) = [] []
[] [] >> whos a 1x1 4 cell (2)元胞數組的數據獲得 從元胞數組中讀取數據,可保存為一個標准的數組或一個新的單元數組,或取出數組進行計算。元胞數組中數據的訪問,可通過元胞內容的下標進行,用元胞數組名加大括號{}。大括號中數值表示元胞的下標。如a{1,2}表示元胞數組中第一行第二列的元胞。
a = [ 20] 'matlab' >> str=a(1,2) str = 'matlab' >> class(str) ans = cell >> str=a{1,2} str = matlab >> class(str) ans = char ()和{}有着本質的區別,大括號用於表示元胞的內容,小括號表示指定的元胞。
[ 20] 'matlab' >> 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] >> b=a(2:3,2:3) b = [5] [6] >> c=a(1:3,2:3) c = [2] [3] 本例使用元胞下標的方式創建了新的元胞數組b和c,通過結果看出b和c就是元胞數組a的一部分。 (3)元胞數組的刪除和重塑 要刪除單元數組中的行或列,可以用冒號表示單元數組中的行或列,然后對其賦一個空矩陣即可。
a={20,'matlab';ones(2,3),1:3} a = [ 20] 'matlab' >> a(1,:)=[] a = [2x3 double] [1x3 double] >> a={20,'matlab';ones(2,3),1:3}; a = [] 'matlab' >> a(1)=[] a = [2x3 double] 'matlab' [1x3 double] >> a(2)=[] a = [2x3 double] [1x3 double] >> a(1,2)=[] >> 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] >> b=cellfun('isreal',a) b = 1 1 0 >> c=cellfun('length',a) c = 1 6 1 >> d=cellfun('isclass',a,'double') d = 1 0 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)}; (8)元胞數組與數值數組間的轉化 應用循環,可以將元胞數組轉化為數值數組。 |