MATLAB 中的 cell (單元格數組)


MATLAB 的 cell,稱單元格數組 or 元胞數組:使用頻率特別高,甚至比 struct 結構體還高。

MATLAB文檔給出的 cell 官方定義:

A cell array is a collection of containers called cells in which you can store different types of data.

精華之處就是在可以存儲不同類型的數據.可以是Matlab的類型或者自定義的類型.

一個元胞數組的一個單元可能包含:一個實數數組 or 字符型數組 or 複數數組 or 元胞數組(嵌套)

1 元胞數組的創建

創建方法有 3 種:直接賦值法、利用函數cell()、利用{ }直接創建元胞數組的所有單元。

1.1 直接賦值法

通過賦值語句把值賦到單元數組的一個單元中,但每一次賦值只能創建一個單元內容。

兩種賦值方法:內容索引法(content indexing)和單元索引法(cell indexing)。

(1)內容索引法:賦值語句的左邊用大括號 { } 將標識單元的下標括起來,右邊爲單元的內容。
    在這裏插入圖片描述在這裏插入圖片描述
(2)單元索引法:賦值語句的左邊用小括號 () 將標識單元的下標括起來,右邊用大括號將存儲於單元中的數據括起來。
在這裏插入圖片描述在這裏插入圖片描述

1.2 利用函數cell() ——較爲常用

利用函數cell() 可以創建一個元胞數組,還可以規定其大小。

cell_array = cell(m,n)

此公式創建了一個m x n的元胞數組,但是這只是預定義一個元胞數組,後面需要利用賦值法對元胞的每個單元進行初始化賦值,方法同直接賦值法

1.3 利用{ }直接創建元胞數組(的所有單元)

這是一種快捷的元胞數組創建方法,利用 { } 可以直接快速地創建所需元胞數組。在大括號中一次列出所需創建元胞數組的內容,它們之間用逗號(,)隔開,行與行之間用分號(;)隔開,這樣就可以創建一個已經初始化好的元胞數組。
利用 { } 創建元胞數組的格式爲:
  cellname={[cell 1,1],[cell 1,2],......,[cell 1,n] ; ...... ; [cell m,1],[cell m,2],......,[cell m,n]};
  此即爲創建了一個 m×n 的元胞數組,並將單元進行了初始化。
  在這裏插入圖片描述

2 元胞數組的尋訪

在編程時,一個元胞數組的每一個單元都是一個指針,指向其他的數據結構,而這些數據結構可以是不同的數據類型。 在MATLAB中,元胞數組創建時,沒有顯示內容單元的內容,顯示的只是它相應的數據類型。而MATLAB可以通過單元的名稱來尋訪其單元包含的內容。

在MATLAB中,元胞數組的尋訪有以下兩種形式。

(1)用( )將下標括起來尋訪其單元的結構類型。

(2)用{ }將下標括起來尋訪其單元的內容。

在這裏插入圖片描述在這裏插入圖片描述

(3)此外,可以用celldisp( )函數對元胞數組的所有內容進行尋訪。

在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

PS:

關於cell的訪問:

1.X= C(s)使用這種"()"形式的返回的是cell類

2.X = C{s}使用這種"{}"形式的返回的是cell中的內容

3.其他的基本上與通常的數組.矩陣訪問一樣了

4.A{1,1}(2,3:end)訪問的是A中的第一個cell裏面內容的第2行的第三個元素以後的所有元素

5.A{1,3}.name訪問的是A中的A{1,3}cell裏面結構的name值

6.cell的圖形化顯示使用命令cellplot(A)即可如B={[1;2]},這就定義了一個cell型的變量B,裏面保存的是一個矩陣[1;2],要引用裏面的數據只要在大括號裏寫上對應的下標即可,如B{1}。

下面我們給B再加個元素,我們可以這樣定義B(2)={‘hello’}。也可以利用引用的方法定義B{2}=’hello’。第二種方法比第一種方法更方便所以更常用。

這樣B就有兩個元素了,B(1)是{[1;2]},B(2)是{‘hello’},每個元素都是cell型的(注意和B{1}、B{2}的區別,B{1}是[1;2],B{2}是’hello’)。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章