MATLAB 程式設計/陣列/結構體陣列
外觀
< MATLAB 程式設計 | 陣列
(重定向自 MATLAB 程式設計/結構體陣列)MATLAB 提供了一種用於結構體資料元素的方法。結構體的建立和訪問方式對那些熟悉 C 語言程式設計的人來說很熟悉。
MATLAB 有多種方法來定義和訪問結構體欄位。有關更多詳細資訊,請參閱宣告結構體。
注意:結構體欄位名必須以字母開頭,區分大小寫。其餘名稱可以包含字母、數字和下劃線字元。使用 namelengthmax 函式來確定欄位名的最大長度。
可以使用 struct 命令宣告結構體。
>> a = struct('b', 0, 'c', 'test')
a =
b: 0
c: 'test'
在 MATLAB 中,變數不需要在使用之前顯式宣告。因此,結構體可以使用 '.' 運算子宣告。
>> a.c = 'test'
a =
c: 'test'
結構體可以根據需要宣告,欄位也可以。
結構體也可以是陣列。下面是一個示例
>> a = struct('b', 0, 'c', 'test'); % Create structure
>> a(2).b = 1; % Turn it into an array by creating another element
>> a(2).c = 'testing'
a =
1x2 struct array with fields:
b
c
>> a(1) % Initial structure
ans =
b: 0
c: 'test'
>> a(2) % The second element
ans =
b: 1
c: 'testing'
當知道欄位名時,可以直接訪問欄位值。
>> a.c
ans =
test
ans =
testing
在某些情況下,您可能需要動態訪問欄位,這可以透過以下方式完成。
>> str = 'c';
>> a(1).(str)
ans =
test
>> a(1).c
ans =
test
結構體陣列中的任何給定元素都可以透過類似這樣的陣列索引訪問
>> a(1).c
ans =
test
要訪問結構體陣列中的所有元素,請使用語法 {structure.field}。為了獲得向量或陣列中的所有值,請使用方括號 ([]),如下所示。
>> [a.('c')]
ans =
testtesting
>> [a.('b')]
ans =
0 1
或者你可以將它們全部放入一個元胞陣列(而不是將它們連線起來),像這樣
>> {a.('c')}
ans = {'test', 'testing'}
Matlab 提供了為每個陣列元素的欄位賦值的工具。考慮以下結構體陣列
foo = struct('field_a',{1,2,3,4}, 'field_b',{4,8,12,16})
以下命令為每個陣列元素的 field_b 欄位分配相同的值
value = 1;
[foo.field_b] = deal(value)
要為每個陣列元素分配不同的值
value = {4,8,12,16};
[foo.field_b] = value{:}
使用 Matlab,可以透過使用邏輯索引從陣列中提取子陣列。考慮以下結構體陣列
foo = struct('field_a',{1,2,3,4},'field_b',{4,8,12,16})
為了從 foo 中獲得一個子陣列,其中所有 foo.field_a 值都等於 2,可以使用布林陣列執行邏輯索引。因此,用於此目的的返回布林陣列的布林測試將是
[foo.field_a] == 2
因此,透過使用此布林陣列執行邏輯索引,Matlab 透過執行以下操作定義了一個結構體陣列,其元素包含來自 foo 的那些 field_a 值等於 2 的元素
foo([foo.field_a] == 2)