Matlab中创建结构体数组和访问结构体中数组
创建结构体数组下面的示例说明了如何创建结构体数组。结构体是使用被称为字段的数据容器将相关数据组合在一起的一种数据类型。每个字段都可以包含任意类型或任意大小的数据。将记录存储在含有字段name、billing和test的标量结构体中。patient(1).name = ...
目录
创建结构体数组
下面的示例说明了如何创建结构体数组。结构体是使用被称为字段的数据容器将相关数据组合在一起的一种数据类型。每个字段都可以包含任意类型或任意大小的数据。将记录存储在含有字段 name、billing 和 test 的标量结构体中。
patient(1).name = 'John Doe';
patient(1).billing = 127.00;
patient(1).test = [79, 75, 73; 180, 178, 177.5; 220, 210, 205];
patient
patient = struct with fields:
name: 'John Doe'
billing: 127
test: [3x3 double]
通过在数组名称后添加下标,可在此数组中添加其他患者的记录。
patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68, 70, 68; 118, 118, 119; 172, 170, 169];
patient
patient=2×3 struct
name
billing
test
数组中的每条患者记录都是struct
类的结构体。由结构体构成的数组通常称为结构体数组。与其他MATLAB数组类似,结构体数组可以具有任意维度。
结构体数组具有下列属性:
-
数组中的所有结构体都具有相同数目的字段。
-
所有结构体都具有相同的字段名称。
-
不同结构体中的同名字段可包含不同类型或大小的数据。
数组中新结构体的任何未指定字段均包含空数组。
patient(3).name = 'New Name';
patient(3)
ans = struct with fields:
name: 'New Name'
billing: []
test: []
访问结构体数组中的数据,看一下以下数据,并根据其测试结果创建一个条形图。
amount_due = patient(1).billing
amount_due = 127
bar(patient(1).test)
title(['Test Results for ', patient(1).name])
访问结构体中数组
该例子如何访问结构体数组的内容。为了运行此示例中的代码,先将多个变量加载到名为S
的结构体中。
访问标量结构体中的数据
首先,将数据从 flujet.mat
加载到标量结构体 S
中。文件 flujet.mat
包含一幅仿真天体物理射流经历紊流的图像。
S = load('flujet.mat')
S = struct with fields:
X: [400x300 double]
map: [64x3 double]
caption: [2x32 char]
该文件中的变量(X、caption 和 map)现在为结构体中的字段。使用 structName.fieldName 形式的圆点表示法访问数据。例如,将字段 X 中的数值数据传递给 image 函数:
image(S.X)
colormap(S.map)
要访问字段的一部分内容,请添加适合字段中数据的大小和类型的索引。例如,将 X
的左中部分传递给 image
函数。
centerLeft = S.X(150:250,1:50);
image(centerLeft)
如果一个字段包含元胞数组,请使用花括号访问数据,例如 S.cellField{1:50,1:80}
。
通过对结构体数组进行索引来访问数据
通过将文件 cape.mat
中的数据加载到数组 S
的第二个元素中来创建一个非标量数组。文件 cape.mat
包含马萨诸塞州鳕鱼角的图像。
一个结构体数组的每个元素都必须具有相同的字段。flujet.mat
和 cape.mat
都包含变量 X
、map
和 caption
。S
是 1×2 数组。
S(2) = load('cape.mat')
S=1×2 struct array with fields:
X
map
caption
对于非标量结构体,访问字段的语法为 structName(indices).fieldName
。显示鳕鱼角的图像,将 2
指定为 S
的索引。
image(S(2).X)
colormap(S(2).map)
添加索引以选择和显示 S(2).X
的一小部分。
capeSection = S(2).X(200:300,150:250);
image(capeSection)
注意
仅当引用结构体数组的单个元素时,才能为字段的部分内容建立索引。MATLAB® 不支持诸如
S(1:2).X(1:50,1:80)
的语句,后者尝试为结构体的多个元素的字段建立索引。
更多推荐
所有评论(0)