
- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料輸出
- MATLAB - 資料歸一化
- MATLAB - 預定義變數
- MATLAB - 決策
- MATLAB - 決策
- MATLAB - If End 語句
- MATLAB - If Else 語句
- MATLAB - If…Elseif Else 語句
- MATLAB - 巢狀 If 語句
- MATLAB - Switch 語句
- MATLAB - 巢狀 Switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - For 迴圈
- MATLAB - While 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - Break 語句
- MATLAB - Continue 語句
- MATLAB - End 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - Return 語句
- MATLAB - 空函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波器函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序順序
- MATLAB - Map 函式
- MATLAB - Mean 函式
- MATLAB - End 函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - Try...Catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 二維線圖
- MATLAB - 三維圖
- MATLAB - 格式化繪圖
- MATLAB - 對數座標軸繪圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製三維等值線
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 二維陣列插值
- MATLAB - 三維陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 二維逆餘弦變換
- MATLAB - 向座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者定義類
- MATLAB - 複製物件
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消元法
- MATLAB - 高斯-約旦消元法
- MATLAB - 簡化行階梯形
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 雜項
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
MATLAB - 元胞陣列
在 MATLAB 中,元胞陣列是一種靈活的資料結構,允許您儲存不同型別和大小的資料。這與常規陣列不同,在常規陣列中,陣列中的元素必須具有相同的資料型別。
元胞陣列提供了靈活性,在處理混合資料時特別有用。元胞陣列非常擅長處理複雜資料集,並能夠建立更動態和高效的 MATLAB 程式碼。
元胞陣列與普通陣列
元胞陣列和普通陣列都是 Matlab 中的資料結構。以下是它們之間的區別:
元胞陣列 | 普通陣列 |
---|---|
元胞陣列可以儲存不同資料型別的元素,例如數字、字串、其他陣列,甚至其他元胞陣列。 | 普通陣列(數值陣列或矩陣)只能儲存相同資料型別的元素。例如,如果您建立一個數值陣列,則所有元素都必須是相同資料型別的數字(例如,double、int 等)。 |
元胞陣列使用花括號 {} 來索引和訪問單個元素。 | 普通陣列使用圓括號 () 來索引和訪問元素。 |
元胞陣列可以在執行時動態增長或縮小,允許您根據需要新增或刪除元素,而無需預先分配任何記憶體。 | 普通陣列一旦建立,其大小就固定了。要更改普通陣列的大小,您需要建立一個新陣列並複製資料。 |
元胞陣列在處理不同大小的資料元素時記憶體效率更高。 | 普通陣列具有固定大小,如果您需要儲存資料,則必須分配額外的記憶體。 |
訪問元胞陣列中的元素可能比訪問普通陣列中的元素稍慢,這是因為處理不同資料型別和大小的複雜資料結構。 | 訪問普通陣列中的元素通常更快,因為所有元素都具有相同的資料型別。 |
元胞陣列適用於處理複雜和混合資料 元胞陣列適用於處理複雜和混合資料。它們擅長處理多個輸出函式並分層組織資料。 | 普通陣列非常適合數值計算、矩陣運算以及資料型別統一且大小固定的應用。 |
元胞陣列的描述和建立
您可以透過以下方式建立元胞陣列:
- 使用元胞陣列運算子 {}
- 使用 cell() 函式
要使用運算子 {} 建立元胞陣列
元胞陣列是一種資料結構,它包含稱為單元格的索引資料容器,其中每個單元格都可以靈活地儲存任何型別的資料。
要建立元胞陣列,我們需要使用花括號 {}。
示例
C = {'2023-07-23',[10 20 30 40]}
在 matlab 中執行後,您將獲得以下結果:
>> C = {'2023-07-23',[10 20 30 40]} C = { [1,1] = 2023-07-23 [1,2] = 10 20 30 40 } >>
我們上面建立的元胞陣列的大小為 1x2,即一行兩列。
讓我們再新增一行,如下所示:
C(2,:) = {'2023-07-24',[11 22 33 44]};
執行後將獲得以下單元格:
C = 2x2 cell array {'2023-07-23'} {[10 20 30 40]} {'2023-07-24'} {[11 22 33 44]} >>
讓我們再新增一行。
C(3,:) = {'2023-07-25',[1 2 3 4]};
執行後的輸出為:
C = 3x2 cell array {'2023-07-23'} {[10 20 30 40]} {'2023-07-24'} {[11 22 33 44]} {'2023-07-25'} {[ 1 2 3 4]} >>
因此,我們現在有 3 行 2 列,使其成為一個 3x2 元胞陣列。
現在,要訪問第一行,您可以簡單地執行以下操作:
C(1,:)
執行後的輸出為:
>> C(1,:) ans = 1x2 cell array {'2023-07-23'} {[10 20 30 40]} >>
要訪問第一行中的第二列,您可以簡單地執行以下操作:
C(1,2)
執行後的輸出為:
>> C(1,2) ans = 1x1 cell array {[10 20 30 40]} >>
您還可以建立空單元格,如下所示:
A = {}
執行後,您應該看到如下所示:
>> A = {} A = 0x0 empty cell array >>
擁有空單元格陣列後,您可以根據需要向其中新增資料。
使用 cell() 函式
此方法允許您預分配元胞陣列,以便以後分配資料。
語法
C = cell(n) C = cell(sz1,...,szN) C = cell(sz)
- 建立一個大小為 nxn 的元胞陣列 cell(n) 返回一個 n×n 的元胞陣列,其中包含空矩陣。
- 建立一個大小為 sz1-by-...-by-szN 的元胞陣列 cell(sz1,...,szN) 返回一個 sz1,...,szN 的元胞陣列,其中包含空矩陣。這裡 sz1..szN 表示每個維度的尺寸。例如 cell(3,3) 將返回一個大小為 3x3 的元胞陣列。
- 建立一個大小為 sz 向量 的空元胞陣列。例如 cell([3,3]) 將返回一個 3x3 的元胞陣列。
讓我們看看使用 cell() 函式的一些示例。
示例 1
A = cell(2)
在 matlab 命令視窗中執行後,輸出為:
>> A = cell(2) A = { [1,1] = [](0x0) [2,1] = [](0x0) [1,2] = [](0x0) [2,2] = [](0x0) } >>
示例 2
在此示例中,將建立一個大小為 3x3x3 的元胞陣列。該元胞陣列在建立時為空,但其大小將為 3x3x3。
C = cell(3,3,3);
執行後,您將獲得以下輸出:
>> C = cell(3,3,3) 3x3x3 cell array C(:,:,1) = {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} C(:,:,2) = {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} C(:,:,3) = {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} >>
示例 3
在此示例中,將建立一個空元胞陣列,然後更新其中的資料。資料將是不同型別。
C = cell(2, 3);
執行後,您將看到一個大小為 2x3 的空元胞陣列,如下所示:
>> C = cell(2, 3) C = 2x3 cell array {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} >>
現在讓我們為每個單元格分配資料。
C{1, 1} = 'Hello'; C{1, 2} = 50; C{1, 3} = [1, 2, 3]; C{2, 1} = 3.14; C{2, 2} = 'TEST'; C{2, 3} = magic(3);
執行後將獲得以下結果:
>> C = cell(2, 3) C = 2x3 cell array {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} {0x0 double} >> C{1, 1} = 'Hello'; C{1, 2} = 50; C{1, 3} = [1, 2, 3]; C{2, 1} = 3.14; C{2, 2} = 'TEST'; C{2, 3} = magic(3); >> C C = 2x3 cell array {'Hello' } {[ 50]} {[ 1 2 3]} {[3.1400]} {'TEST'} {3x3 double} >>
元胞陣列中的每個單元格都可以儲存不同型別的資料,例如字串、數字、矩陣、陣列;這使得元胞陣列在 MATLAB 中處理異構資料時更加靈活。
將陣列轉換為元胞陣列
在這裡,我們將瞭解如何將給定陣列轉換為元胞陣列。我們將使用函式 num2cell()。
num2cell()
num2cell() 允許您將數值陣列轉換為元胞陣列,其中數值陣列的每個元素都成為元胞陣列的元素。
示例
nArr = [1, 2, 3, 4, 5]; C = num2cell(nArr)
在 Matlab 命令視窗中執行後,輸出為:
>> nArr = [1, 2, 3, 4, 5]; C = num2cell(nArr) C = { [1,1] = 1 [1,2] = 2 [1,3] = 3 [1,4] = 4 [1,5] = 5 } >>
在這個例子中,num2cell() 函式將給定的數值陣列 [1, 2, 3, 4, 5] 轉換為一個元胞陣列,其中數值陣列的每個元素都變成了元胞陣列的一個元素。元胞陣列 C 與給定的數值陣列具有相同的大小,並且每個元胞包含數值陣列中的一個元素。
將表格轉換為元胞陣列
在本節中,我們將看到一個示例,展示如何將表格轉換為元胞陣列。
Matlab 帶有一個名為 table2cell() 的函式,可以幫助將表格轉換為元胞陣列。在此過程中,表格中的每個變數都將成為元胞的列。
table2cell()
table2cell() 函式用於將表格轉換為元胞陣列。表格和元胞陣列是 MATLAB 中兩種不同的資料結構,表格用於儲存和管理具有命名列的表格資料,而元胞陣列是更通用的容器,可以在不同的元胞中儲存不同型別的資料。
當您想要執行更容易使用元胞陣列完成的操作時,將表格轉換為元胞陣列(使用 table2cell())會很有用。
示例
Name = {'Riya'; 'Siya'; 'Tiya'}; Age = [25; 30; 28]; Height = [160; 175; 168]; Weight = [55; 70; 65]; T = table(Name, Age, Height, Weight); C = table2cell(T)
在上面的例子中,我們首先建立一個包含 Name、Age、Height 和 Weight 列的示例表格 T。然後,我們使用 table2cell() 函式將表格 T 轉換為元胞陣列 C。最後,我們顯示元胞陣列 C 中的內容。
當您在 Matlab 命令視窗中執行相同的操作時,輸出為:
>> Name = {'Riya'; 'Siya'; 'Tiya'}; Age = [25; 30; 28]; Height = [160; 175; 168]; Weight = [55; 70; 65]; T = table(Name, Age, Height, Weight); C = table2cell(T) C = 3x4 cell array {'Riya'} {[25]} {[160]} {[55]} {'Siya'} {[30]} {[175]} {[70]} {'Tiya'} {[28]} {[168]} {[65]} >>