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
廣告

© . All rights reserved.