參考文獻
https://ww2.mathworks.cn/help/matlab/ref/rmfield.html
https://ww2.mathworks.cn/help/matlab/ref/arrayfun.html
https://ww2.mathworks.cn/help/matlab/ref/structfun.html
https://ww2.mathworks.cn/help/matlab/ref/struct2cell.html
https://ww2.mathworks.cn/help/matlab/ref/cell2struct.htmlhtml
定義一個包含 first、second、third 和 fourth 字段的標量結構體。 S.first = 1; S.second = 2; S.third = 3; S.fourth = 4; 刪除字段 first 和 fourth。 fields = {'first','fourth'}; S = rmfield(S,fields) S = struct with fields: second: 2 third: 3
將函數應用於每一個數組元素,區別在於structfun 的輸入參數必須是標量結構體。git
建立一個非標量結構體數組。每一個結構體有一個包含隨機數向量的字段。這些向量具備不一樣的大小。 S(1).f1 = rand(1,5); S(2).f1 = rand(1,10); S(3).f1 = rand(1,15) S = 1x3 struct array with fields: f1 使用 arrayfun 函數計算 S 中每一個字段的均值。不能使用 structfun 完成此計算,由於 structfun 的輸入參數必須是標量結構體。 A = arrayfun(@(x) mean(x.f1),S) A = 1×3 0.6786 0.6216 0.6069
建立一個結構體數組,其中每一個結構體有兩個包含數值數組的字段。 S(1).X = 5:5:100; S(1).Y = rand(1,20); S(2).X = 10:10:100; S(2).Y = rand(1,10); S(3).X = 20:20:100; S(3).Y = rand(1,5) S = 1x3 struct array with fields: X Y 繪製數值數組。從 plot 函數返回一個圖形線條對象的數組,並使用這些對象爲每一組數據點添加不一樣的標記。arrayfun 能夠返回任何數據類型的數組,只要該數據類型的對象能夠串聯便可。 figure hold on p = arrayfun(@(a) plot(a.X,a.Y),S); p(1).Marker = 'o'; p(2).Marker = '+'; p(3).Marker = 's'; hold off
S(1).f1 = rand(3,5);
S(2).f1 = rand(6,10);
S(3).f1 = rand(4,2)
S = 1x3 struct array with fields:
f1github
使用 arrayfun 函數計算 S 中每一個字段的均值。mean 返回包含每列均值的向量,所以不能以數組的形式返回均值。要以元胞數組的形式返回均值,請指定 'UniformOutput',false 名稱-值對組。數組
A = arrayfun(@(x) mean(x.f1),S,'UniformOutput',false)
A = 1x3 cell array
{1x5 double} {1x10 double} {1x2 double}
```函數
建立一個非標量結構體數組。 S(1).f1 = 1:10; S(2).f1 = [2; 4; 6]; S(3).f1 = [] S = 1x3 struct array with fields: f1 使用 arrayfun 函數計算 S 中每一個字段的大小。行數和列數分別輸出在兩個 1×3 數值數組中。 [nrows,ncols] = arrayfun(@(x) size(x.f1),S) nrows = 1×3 1 3 0 ncols = 1×3 10 1 0
對標量結構體的每一個字段應用函數--和arrayfun不一樣,arrayfun對全部元素應用函數,structfun對全部字段應用函數學習
S.f1 = 1:10;
S.f2 = [2; 4; 6];
S.f3 = []
S = struct with fields:
f1: [1 2 3 4 5 6 7 8 9 10]
f2: [3x1 double]
f3: []spa
計算每一個數值數組的均值,而後以數組的形式返回這些均值。3d
A = structfun(@mean,S)
A = 3×1code
5.5000
4.0000
NaNorm
* A = structfun(func,S,Name,Value) * A = structfun(func,S,Name,Value) 應用 func 並使用一個或多個 Name,Value 對組參數指定其餘選項。例如,要以結構體形式返回輸出值,**請指定 'UniformOutput',false。** 當 func 返回的值不能合併爲數組時,能夠按結構體形式返回 A。返回的結構體具備與 S 相同的字段。
建立一個標量結構體,其字段中包含矩陣。
S.f1 = 1:10;
S.f2 = [2 3; 4 5; 6 7];
S.f3 = rand(4,4)
S = struct with fields:
f1: [1 2 3 4 5 6 7 8 9 10]
f2: [3x2 double]
f3: [4x4 double]
計算每一個矩陣的均值。mean 返回包含每列均值的向量,所以不能以數組的形式返回均值。要以結構體形式返回均值,請指定 'UniformOutput',false 名稱-值對組。
A = structfun(@mean,S,'UniformOutput',false)
A = struct with fields:
f1: 5.5000
f2: [4 5]
f3: [0.6902 0.3888 0.7627 0.5962]
* [A1,...,Am] = structfun( ___ ) * 當 func 返回 m 個輸出值時,[A1,...,Am] = structfun(_ __ ) 返回多個輸出數組 A1,...,Am。func 能夠返回不一樣數據類型的輸出參數,但每次調用 func 時返回的每一個輸出的數據類型必須相同。能夠將此語法與前面語法中的任何輸入參數結合使用。
建立一個標量結構體。
S.f1 = 1:10;
S.f2 = [2 3; 4 5; 6 7];
S.f3 = rand(4,4)
S = struct with fields:
f1: [1 2 3 4 5 6 7 8 9 10]
f2: [3x2 double]
f3: [4x4 double]
計算 S 中每一個數組的大小。行數和列數都是一個 3×1 數值數組。
[nrows,ncols] = structfun(@size,S)
nrows = 3×1
1 3 4
ncols = 3×1
10 2 4
```
建立一個結構體。 S.x = linspace(0,2*pi); S.y = sin(S.x); S.title = 'y = sin(x)' S = struct with fields: x: [1x100 double] y: [1x100 double] title: 'y = sin(x)' 將 S 轉換爲元胞數組。 C = struct2cell(S) C = 3x1 cell array {1x100 double} {1x100 double} {'y = sin(x)'} 元胞數組不包含字段名稱。要返回元胞數組中的字段名稱,請使用 fieldnames 函數。fieldnames 和 struct2cell 以相同的順序返回字段名稱和值。 fields = fieldnames(S) fields = 3x1 cell array {'x' } {'y' } {'title'}
輸入如下命令以建立初始元胞數組 employees: devel = {{'Lee','Reed','Hill'}, {'Dean','Frye'}, ... {'Lane','Fox','King'}}; sales = {{'Howe','Burns'}, {'Kirby','Ford'}, {'Hall'}}; mgmt = {{'Price'}, {'Clark','Shea'}, {'Sims'}}; qual = {{'Bates','Gray'}, {'Nash'}, {'Kay','Chase'}}; docu = {{'Lloyd','Young'}, {'Ryan','Hart','Roy'}, {'Marsh'}}; employees = [devel; sales; mgmt; qual; docu] employees = {1x3 cell} {1x2 cell} {1x3 cell} {1x2 cell} {1x2 cell} {1x1 cell} {1x1 cell} {1x2 cell} {1x1 cell} {1x2 cell} {1x1 cell} {1x2 cell} {1x2 cell} {1x3 cell} {1x1 cell}
rowHeadings = {'development', 'sales', 'management', 'quality', 'documentation'};
depts = cell2struct(employees, rowHeadings, 1) depts = 3x1 struct array with fields: development sales management quality documentation
depts(1:2).development ans = 'Lee' 'Reed' 'Hill' ans = 'Dean' 'Frye'
colHeadings = {'fiveYears' 'tenYears' 'fifteenYears'}; years = cell2struct(employees, colHeadings, 2) years = 5x1 struct array with fields: fiveYears tenYears fifteenYears
[~, sales_5years, ~, ~, docu_5years] = years.fiveYears sales_5years = 'Howe' 'Burns' docu_5years = 'Lloyd' 'Young'
rowHeadings = {'development', 'documentation'}; depts = cell2struct(employees([1,5],:), rowHeadings, 1) depts = 3x1 struct array with fields: development documentation
for k=1:3 depts(k,:) end ans = development: {'Lee' 'Reed' 'Hill'} documentation: {'Lloyd' 'Young'} ans = development: {'Dean' 'Frye'} documentation: {'Ryan' 'Hart' 'Roy'} ans = development: {'Lane' 'Fox' 'King'} documentation: {'Marsh'}