- 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 - 返回語句
- MATLAB - 空函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波器函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序順序
- MATLAB - 對映函式
- MATLAB - 平均值函式
- MATLAB - 結束函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - Try...Catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 2D 線圖
- MATLAB - 3D 圖
- MATLAB - 格式化繪圖
- MATLAB - 對數座標軸繪圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製 3D 等值線
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 2D 陣列插值
- MATLAB - 3D 陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 2D 逆餘弦變換
- 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 struct() 函式
在 MATLAB 中,struct() 函式提供了一種方便且通用的方法來建立結構體陣列。
語法
s = struct(field,value)
struct() 函式使您能夠透過在單個呼叫中指定欄位名稱和相應的值來建立結構體陣列。
建立結構體陣列
讓我們看看一個使用 struct() 函式建立結構體陣列的簡單示例。
示例
讓我們建立一個儲存學生姓名和年齡資訊的結構體陣列。
names = {'Riya', 'Tiya', 'Siya'}
ages = [20, 22, 19]
students = struct('Name', names, 'Age', ages)
在這個示例中,student 結構體陣列有兩個欄位,“Name”和“Age”,使用元胞陣列和數值陣列分配相應的值。
當您在 MATLAB 命令視窗中執行相同的操作時,輸出為 -
>> names = {'Riya', 'Tiya', 'Siya'}
ages = [20, 22, 19]
students = struct('Name', names, 'Age', ages)
names =
{
[1,1] = Riya
[1,2] = Tiya
[1,3] = Siya
}
ages =
20 22 19
students =
1x3 struct array with fields:
Name
Age
結構體陣列中的多個欄位
這是一個向結構體陣列新增多個欄位的示例。
以下是我們將作為欄位和值的資料。
field1 = 'a1'; value1 = zeros(1,10); - 這將建立一個名為“a1”的欄位,並將一個包含 10 個元素的零數值陣列分配給 value1。
field2 = 'a2'; value2 = {'a', 'b'}; - 這將定義一個名為“a2”的欄位,並將包含字元字串“a”、“b”的元胞陣列分配給 value2。
field3 = 'a3'; value3 = {pi, pi.^2}; - 這將宣告一個名為“a3”的欄位,並將一個包含兩個元素的元胞陣列分配給 value3:數學常數 pi 和 pi 的平方 (pi^2)。
field4 = 'a4'; value4 = {'testing'}; - 這將建立一個名為“a4”的欄位,並將包含字串“testing”的元胞陣列分配給 value4。
field1 = 'a1'; value1 = zeros(1,10);
field2 = 'a2'; value2 = {'a', 'b'};
field3 = 'a3'; value3 = {pi, pi.^2};
field4 = 'a4'; value4 = {'testing'};
s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
當您執行上述程式碼時,生成的結構體 s 包含四個欄位:“a1”、“a2”、“a3”和“a4”。
>> field1 = 'a1'; value1 = zeros(1,10);
field2 = 'a2'; value2 = {'a', 'b'};
field3 = 'a3'; value3 = {pi, pi.^2};
field4 = 'a4'; value4 = {'testing'};
s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
s =
1x2 struct array with fields:
a1
a2
a3
a4
我們為 value2 和 value 2 使用了元胞陣列,大小為 1×2,因此 s 的大小為 1×2
因此,s(1) 和 s(2) 的輸出如下所示 -
s(1)
>> s(1)
ans =
struct with fields:
a1: [0 0 0 0 0 0 0 0 0 0]
a2: 'a'
a3: 3.1416
a4: 'testing'
s(2)
>> s(2)
ans =
struct with fields:
a1: [0 0 0 0 0 0 0 0 0 0]
a2: 'b'
a3: 9.8696
a4: 'testing'
以下列出了與結構體一起使用時,可在程式碼中為您提供幫助的一些內建函式。
| 函式 | 描述 |
|---|---|
| fieldnames() | 此方法將給出結構體中使用的欄位名稱。 |
| isfield() | 此方法檢查給定的輸入欄位是否屬於結構體。 |
| isstruct() | 此方法將告訴您給定的輸入是否為結構體陣列。 |
| rmfield() | 此方法從結構體陣列中刪除給定的欄位。 |
fieldnames()
此方法將返回結構體的欄位名稱。
語法
fields = fieldnames(S)
讓我們首先建立一個結構體,並在其上使用 fieldnames() 函式。
names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
fieldnames(students)
當您在 MATLAB 中執行程式碼時,輸出為 -
>> names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
fieldnames(students)
ans =
{
[1,1] = Name
[2,1] = Age
}
isfield()
如果給定的欄位名稱是結構體中的欄位,則此方法將返回 1,如果不是,則返回 0。
語法
res = isfield(S,field)
此處,S 是結構體陣列,field 是您正在檢查的欄位名稱,以確定它是否是結構體陣列 S 中的欄位。
示例
names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
isfield(students, 'Names')
當您在 MATLAB 中測試程式碼時,輸出為 -
>> names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
isfield(students, 'Name')
ans = 0
isstruct()
如果給定的輸入是結構體陣列,則該函式返回邏輯 1(真),否則返回邏輯 0(假)。
語法
a = isstruct(A)
示例
names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
isstruct(students)
當您在 MATLAB 命令視窗中執行相同的操作時。
>> names = {'Riya', 'Tiya', 'Siya'};
ages = [20, 22, 19];
students = struct('Name', names, 'Age', ages);
isstruct(students)
ans = 1
讓我們為 isstruct() 函式提供一些與結構體陣列不同的輸入。
示例
A = [1,2,3;4,5,6;7,8,9] isstruct(A)
當您在 MATLAB 命令視窗中執行上述程式碼時,輸出為 -
>> A = [1,2,3;4,5,6;7,8,9] isstruct(A) A = 1 2 3 4 5 6 7 8 9 ans = 0
rmfield()
該函式將從結構體陣列中刪除給定的欄位。
語法
s = rmfield(S,field)
此處,S 是結構體陣列,field 是您要從結構體陣列中刪除的欄位名稱。
示例
field1 = 'a1'; value1 = zeros(1,10);
field2 = 'a2'; value2 = {'a', 'b'};
field3 = 'a3'; value3 = {pi, pi.^2};
field4 = 'a4'; value4 = {'testing'};
s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
t = rmfield(s, field4)
當您在 MATLAB 中執行上述程式碼時,輸出為 -
>> field1 = 'a1'; value1 = zeros(1,10);
field2 = 'a2'; value2 = {'a', 'b'};
field3 = 'a3'; value3 = {pi, pi.^2};
field4 = 'a4'; value4 = {'testing'};
s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
t = rmfield(s, field4)
s =
1x2 struct array with fields:
a1
a2
a3
a4
t =
1x2 struct array with fields:
a1
a2
a3