-
Matlab-结构体数组的索引
2017-01-03 12:53:48%% 结构体数组的索引 (Structure Array)% 注意:结构体的创建 与 矩阵/元胞数组 不同,元胞数组以元胞的方式进行储存,而结构体...%% 1.n * 1 的结构体数组 imname = dir(['C:\Users\ncf\Desktop\' '*.doc']) imname版本:matlab2014a(如果运行有错误,可以对应版本的help进行修正。这里是我当时总结的笔记,供大家参考,具体查阅相应版本的help)
%% 结构体数组的索引 (Structure Array) % 注意:结构体的创建 与 矩阵/元胞数组 不同,元胞数组以元胞的方式进行储存,而结构体是以 fields 储存的(而不是以对象个数储存的) % 所以元胞数组创建时,提供元胞的大小,而结构体的创建 %% 1.n * 1 的结构体数组 imname = dir(['C:\Users\ncf\Desktop\' '*.doc']) imname.name % 返回所有的 name ,name 相当于一个结构体的变量,一个属性(注意这个和 cell 的联系) imname(:).name %返回所有的 name imname(1).name % 返回第一个对象的 name imname(1) % 返回第一个对象的所有属性2 %% 2.使用 [] 连接结构体数组 % To concatenate structures, they must have the same set of fields, % but the fields do not need to contain the same sizes or types of data. % 前提结构体必须要有相同 set of fields 属性集,但是对于某一个属性不需要包含相同大小和类型的数据 struct1.a = 'first'; struct1.b = [1,2,3]; struct2.a = 'second'; struct2.b = rand(5); combined = [struct1, struct2] % combined 为 1*2 的 struct %% 3.create a 2-by-2 struct array 创建一个 2*2 的结构体数组 new(1,1).a = 1; new(1,1).b = 10; new(1,2).a = 2; new(1,2).b = 20; new(2,1).a = 3; new(2,1).b = 30; new(2,2).a = 4; new(2,2).b = 40; % 理解 a b 相当于结构体的属性,每一个对象都有 a b 属性 % 而对象的索引就是 new(2,2) :第四个对象,第二行第二列的对象,这种可以理解成将矩阵一样,实际不是以二维储存的,而是 new(3) % 将二维转成列 larger = [combined; new] % 因为 combined new 都含有 a b 属性则可以合并 % [] 可以连接矩阵也可以连接结构体 % [ ; ] 竖直连接 相当于函数 vertcat % [ ] 水平连接 相当于函数 horzcat % % % % n * n 结构体的初始化和创建 (与矩阵,元胞数组的初始化不同) newStruct(1:25,1:50) = struct('a',ones(20),'b',zeros(30),'c',rand(40)); % 指定初始化值 % or newStruct(1:25,1:50).a = ones(20); % 指定初始化值 newStruct(1:25,1:50).b = zeros(30); newStruct(1:25,1:50).c = rand(40); % or newStruct(1:25,1:50).a = []; % 不指定初始化值 newStruct(1:25,1:50).b = []; newStruct(1:25,1:50).c = []; % or newStruct(1:25,1:50) = struct('a',[],'b',[],'c',[]); % 不指定初始化值 %% 4.结构体的储存方式 % A structure is a data type that groups related data using data containers called fields. % Each field can contain data of any type or size. % 结构体使用 fields 这样的数据容器将 结构体与数据联系在一起,每一个 field 可以包含不同大小数据类型的数据 %% 5.结构体数组(由每一个结构体组成(即对象),每一个结构体(对象)有相同的属性集(名字和数量相同) fields,不同结构体里的相同属性值,数据类型/大小可以不同) % /1.All structs in the array have the same number of fields % /2.All structs have the same field names % /3.Fields of the same name in different structs can contain different types or sizes of data. patient(1).name = 'John Doe'; patient(1).billing = 127.00; patient(1).test = [79, 75, 73; 180, 178, 177.5; 220, 210, 205]; patient(3).name = 'New Name'; patient(3) % 对于 patient(3) 对象的 billing test 未指定时为空 %% 6.Comma-Separated Lists % 1.Comma-Separated List % Typing in a series of numbers separated by commas gives you what is called a comma-separated list 1,2,3 % 用,分开 % 2.Generating a Comma-Separated List: % 2/1.Generating a List from a Cell Array (由元胞数组产生) C = cell(4,6); for k = 1:24 C{k} = k*2; end C C{:,5} % extracting the fifth column generates the following comma-separated lis % C{1,5},C{2,5},C{3,5},C{4,5} 上面的那个相当于这个 % 2/2.Generating a List from a Structure (由结构数组生成) S = cell2struct(C,{'f1','f2','f3','f4','f5','f6'},2); S.f5 % S(1).f5,S(2).f5,S(3).f5,S(4).f5 上面的与这个相同 % 2/3.Assigning Output from a Comma-Separated List (指定输出) C = cell(4,6); for k = 1:24 C{k} = k*2; end [c1,c2,c3,c4,c5,c6] = C{1,1:6}; c5 % 2/3/1.对于指定少的输出时,舍弃其他的,对于结构体也一样 % You also can use the deal function for this purpose 也可以使用函数 deal [c1,c2,c3] = C{1,1:6} S = cell2struct(C,{'f1','f2','f3','f4','f5','f6'},2); [sf1,sf2,sf3] = S.f5; sf3 % 3.使用 Comma-Separated Lists % 3/1.Constructing Arrays (重建数组) % When you specify a list of elements with C{:, 5}, % MATLAB inserts the four individual elements A = {'Hello',C{:,5},magic(4)} % 3/2.Displaying Arrays (显示数组0) % Use a list to display all or part of a structure or cell array A{:} % 3/3.Concatenation (合并) % 提取出数据再合并 A = [C{:,5:6}] % 3/4.Function Call Arguments (作为函数的输入) X = -pi:pi/10:pi; Y = tan(sin(X)) - sin(tan(X)); C = cell(2,3); C{1,1} = 'LineWidth'; C{2,1} = 2; C{1,2} = 'MarkerEdgeColor'; C{2,2} = 'k'; C{1,3} = 'MarkerFaceColor'; C{2,3} = 'g'; figure plot(X,Y,'--rs',C{:}) % 3/5.Function Return Values (函数返回值) % These values are returned in a list with each value separated by a comma % Instead of listing each return value, you can use a comma-separated list with a structure or cell array % 函数的返回值在返回时,是有逗号隔开的,可以用 a comma-separated list with a structure or cell % array 代替列出每一个返回值 C = cell(1,3); [C{:}] = fileparts('work/mytests/strArrays.mat') %% 7.Access Elements of a Nonscalar Struct Array (从结构数组中获取元素,与之前的内容有交集) % 1.access data from multiple elements of a nonscalar structure array (获取数据) s(1).f = 1; s(2).f = 'two'; s(3).f = 3 * ones(3); s(1:3).f % or s.f % MATLAB? returns the data from the elements in a comma-separated list, % 你不能指定这个 list 到 一个变量中 syntax v = s.f (错,这个默认获取第一个数据,舍弃后两个) % 可以采取以下两种方式: [v1, v2, v3] = s.f % 指定 list 到等个数的变量中 c = {s.f}; % 指定 list 到元胞数组中 % 2.process data from multiple elements of a nonscalar structure array (处理数据) % 如果你想对数组中的每一个元素(具体到每一个结构体的某一属性的元素)施以相同处理,使用 arrayfun 函数 numElements = arrayfun(@(x) numel(x.f), s) % 数出每一个结构体中的 f 属性元素数目,相当于下面的表达式(这样可以扩展函数的使用范围,使输入的可以是很多类型的数据) [numel(s(1).f) numel(s(2).f) numel(s(2).f)] %% 8.Ways to Organize Data in Structure Arrays (组织数据的方法) % 1.Plane Organization img.red = RED; img.green = GREEN; img.blue = BLUE; adjustedRed = .9 * img.red; % 对某一属性的面操作 % 2.Element-by-Element Organization patient(1).name = 'John Doe'; patient(1).billing = 127.00; patient(1).test = [79, 75, 73; 180, 178, 177.5; 220, 210, 205]; % 对某一对象操作 %% 9.Memory Requirements for a Structure Array (结构体的内存分配) % Structure arrays do not require completely contiguous memory. % However, each field requires contiguous memory, % as does the header that MATLAB? creates to describe the array. % For very large arrays, incrementally increasing the number of fields or the number of elements in a field results in Out of Memory errors. % However, in this case, MATLAB only allocates memory for the header, and not for the contents of the array. % matlab 只为 field(the header) 分配内存,而不是为数组中的内容 % Structure arrays 不需要连续的内存,但是每一个 field 需要连续的内存 %% 10.Access Data in Nested Structures (嵌套结构体) % syntax : % structName(index).nestedStructName(index).fieldName(indices) % structName(index) 是最大的类 ,nestedStructName(index) % 是较小的类(生成对象),fieldName(indices) 这个索引的是具体结构体的属性的内容 s.n.a = ones(3); s.n.b = eye(4); s.n.c = magic(5); s(1).n(2).a = 2*ones(3); s(1).n(2).b = 2*eye(4); s(1).n(2).c = 2*magic(5); s(2).n(1).a = '1a'; s(2).n(2).a = '2a'; s(2).n(1).b = '1b'; s(2).n(2).b = '2b'; s(2).n(1).c = '1c'; s(2).n(2).c = '2c'; % s(2).n(2).c :s 的第二个类下的 n 类的 第二个对象的 c 属性 % Access part of the array in field b of the second element in n within the first element of s: part_two_eye = s(1).n(2).b(1:2,1:2)
-
Matlab中元胞数组与结构体数组
2020-06-11 21:59:45该示例比较元胞和结构体数组,并说明如何在每种类型的数组中存储数据。使用元胞和结构体数组都可以存储不同类型和大小的数据。 1.结构体数组 结构体数组中数据包含在可按名称访问的字段中。 例如,将患者记录存储...目录
元胞数组与结构体数组
该示例比较元胞和结构体数组,并说明如何在每种类型的数组中存储数据。使用元胞和结构体数组都可以存储不同类型和大小的数据。
结构体数组
结构体数组中数据包含在可按名称访问的字段中。
例如,将运动员记录存储在一个结构体数组中。
sportsman(1).name = 'John Doe'; sportsman(1).times = 1.10; sportsman(1).test = [79, 75, 73; 180, 178, 177.5; 220, 210, 205]; sportsman(2).name = 'Ann Lane'; sportsman(2).times = 2.10; sportsman(2).test = [68, 70, 68; 118, 118, 119; 172, 170, 169]; sportsman sportsman=2×3 struct name times test
为每位运动者的测试结果创建一个条形图。
numsportsmans = numel(sportsman); for p = 1:numsportsmans figure bar(sportsman(p).test) title(sportsman(p).name) xlabel('Test') ylabel('Result') end
元胞数组
元胞数组中数据包含在可按数值索引访问的元胞中。元胞数组的常见应用包括存储单独的文本段,以及存储电子表格中的异类数据。
例如,在一个元胞数组中存储一段时间中三个城市的温度数据。
temperature(1,:) = {'2009-12-31', [45, 49, 0]}; temperature(2,:) = {'2010-04-03', [54, 68, 21]}; temperature(3,:) = {'2010-06-20', [72, 85, 53]}; temperature(4,:) = {'2010-09-15', [63, 81, 56]}; temperature(5,:) = {'2010-12-09', [38, 54, 18]}; temperature temperature=5×2 cell {'2009-12-31'} {1x3 double} {'2010-04-03'} {1x3 double} {'2010-06-20'} {1x3 double} {'2010-09-15'} {1x3 double} {'2010-12-09'} {1x3 double}
按日期绘制每个城市的温度。
allTemps = cell2mat(temperature(:,2)); dates = datetime(temperature(:,1)); plot(dates,allTemps) title('Temperature Trends for Different Locations') xlabel('Date') ylabel('Degrees (Fahrenheit)')
其他容器数组
结构体和元胞数组是存储异类数据的最常用容器。可以方便地使用表来存储异构的列向数据或表格数据。或者,使用映射容器或创建自己的类。
-
Matlab中结构体数组中数据的组织方法
2020-06-11 22:06:22结构体数组中数据的组织方法 至少有两种方法可用来组织结构体数组中的数据:平面组织和按元素组织。最适合您的数据的方法取决于您计划访问数据的方式,而对于...当创建结构体数组时,MATLAB®将有关每个元素和字段...目录
结构体数组中数据的组织方法
至少有两种方法可用来组织结构体数组中的数据:平面组织和按元素组织。最适合数据的方法取决于计划访问数据的方式,而对于大型数据集,取决于是否存在系统内存约束。
使用平面组织更易于访问字段中的所有值。使用按元素组织更易于访问与单个元素或记录相关的所有信息。以下部分包括每种组织类型的示例:
-
平面组织
-
按元素组织
当创建结构体数组时,MATLAB® 将有关每个元素和字段的信息存储于数组标头中。因此,具有多个元素和字段的结构体比包含相同数据的简单结构体需要更多的内存。
平面组织
以具有与颜色强度值对应的三个数组的 RGB 图像为例。如图所示:
如果工作区中存在数组
RED
、GREEN
和BLUE
,则以下命令将创建一个使用平面组织、名为img
的标量结构体:img.red = RED; img.green = GREEN; img.blue = BLUE;
使用平面组织更易于提取整个图像平面以进行显示、筛选或其他处理。例如,将红色强度值乘以
0.9
:adjustedRed = .9 * img.red;
如果有多幅图像,可以将它们添加到
img
结构体,一个元素img(1),...,img(n)
包含一幅图像。对于将元素添加到结构体的示例,请看以下部分。按元素组织
以包含运动员信息的一个数据库为例。每条记录包含一位运动员的姓名、测试结果和时间的数据。
以下语句在名为
sportman
的结构体数组中创建一个元素:sportman(1).name = 'John Doe'; sportman(1).times = 127.00; sportman(1).test = [79, 75, 73; 180, 178, 177.5; 220, 210, 205];
附加运动员对应于结构体中的新元素。例如,为第二位运动员添加一个元素:
sportman(2).name = 'Ann Lane'; sportman(2).times = 28.50; sportman(2).test = [68, 70, 68; 118, 118, 119; 172, 170, 169];
按元素组织支持简单索引以访问特定患者的数据。例如,计算第一位运动员的测试结果的平均值,按行(维度
2
)而不是按列计算。aveResultsDoe = mean(sportman(1).test,2)
该代码返回
aveResultsDoe = 75.6667 178.5000 212.0000
-
-
Matlab为结构体数组预分配内存
2018-10-17 14:06:38在编写一个循环来给结构体数组中的某个结构体单元赋值时,matlab会提示“变量‘xxx’似乎会随着迭代次数而改变,请预分配内存以提高算法...然后,确定在算法中自己所需的结构体数组的维度,如:30*40; 最后,调用...在编写一个循环来给结构体数组中的某个结构体单元赋值时,matlab会提示“变量‘xxx’似乎会随着迭代次数而改变,请预分配内存以提高算法效率”。下面介绍一种预分配内存的方式:
首先,应该先定义好结构体数组中的单个结构体的数据结构,如:person=struct('name',[],'age',0,'sex',[]);
然后,确定在算法中自己所需的结构体数组的维度,如:30*40;
最后,调用repmat()函数,persons=repmat(person,[30 40]);
这样一个预分配好30*40的结构体数组就初始化完毕并分配好了内存。
-
matlab结构体数组定义方法
2019-03-21 14:47:58当需要定义的参数变量较多时,往往需要用到结构体,Matlab中结构体数组与python中字典概念差不多,使用方法也类似,下面详细介绍其定义方法。 方法一: 直接定义,如定义 // An highlighted block students.name = '... -
MATLAB 定义结构体数组 并存到mat 文件 读取mat
2013-12-15 12:51:28MATLAB 定义结构体数组: for uu=1:50 sssss=svmtrain(Training,Group,Name,Value);%一个结构体变量,可以是动态的,也可以是定值这里是SVMStruct型的结构体变量 ddd(uu).str= sssss ; % 创立并存到... -
matlab向结构体中的数组自动赋值_matlab之结构体数组struct
2020-12-21 23:05:45以下内容来自于:...1.结构数组的创建MATLAB提供了两种定义结构的方式:直接法和使用struct函数法。1. 使用直接引用方式定义结构与建立数值型数组一样,建立新st... -
Matlab中创建结构体数组和访问结构体中数组
2020-06-11 21:30:41下面的示例说明了如何创建结构体数组。结构体是使用被称为字段的数据容器将相关数据组合在一起的一种数据类型。每个字段都可以包含任意类型或任意大小的数据。将记录存储在含有字段name、billing和test的标量结构体... -
MATLAB中的结构体数组(struct)学习笔记
2021-03-13 10:19:24MATLAB,结构体数组 -
matlab 思维数组_matlab多维数组、结构体数组
2020-12-20 14:33:551、多维数组第三维称为...这样就得到的A三维数组为2*2*3double2、结构体数组(我学这个的目的是为了将不同维度的二维数组存放在一块,将不同的二维数组赋值给新的数组,方便循环遍历)结构体数组定义--赋值方式或者用... -
Matlab中访问结构体数组中的数据
2020-06-11 21:50:15目录 访问结构体数组中的数据 1.访问标量结构体中的数据 2.通过对结构体数组进行索引来访问数据 访问结构体数组中的数据 该示例演示了如何访问结构体数组的... -
matlab之结构体数组struct
2018-11-09 15:35:00要在MALTAB中实现比较复杂的编程,就不能不用struct类型。而且在MATLAB中实现struct比C...4. 3.1 结构数组的创建MATLAB提供了两种定义结构的方式:直接法和使用struct函数法。1. 使用直接引用方式定义结构与建立数... -
Matlab 结构体数组的值转向量
2019-09-26 14:54:51在matlab的编程中,用到了结构体数组保存结果。数组中每个结构体保存了一组测试参数的值及其对应的误差及标准差。程序运行完后想要根据这些结果画分析图,但是plot函数需要输入向量,所以需要将结构体中的误差及标准... -
matlab 读取结构体数组的某一个字段_Matlab2020b中新功能的说明(Matlab篇)
2021-02-04 03:22:01每到开始吃螃蟹的季节,Matlab的一年一度的b版本的更新就开始了。这次的更新还是有不少内容是值得关注一下的。首先先说说Matlab自身的一些更新内容,后面会逐步介绍Simulink以及各个常用工具箱的更新内容。E... -
matlab向结构体中的数组自动赋值_如何在MATLAB中初始化结构体数组?
2020-12-21 23:04:03使用repmat是目前为止预分配结构体的最有效的方法:N = 10000;b = repmat(struct('x',1), N, 1 );这是使用Matlab 2011a比预分配通过索引,〜10倍更快N = 10000;b(N).x = 1索引方法仅略微快于不预分配。No ... -
matlab向结构体中的数组自动赋值_数组 – 在Matlab结构体数组的每个元素中更新一个字段...
2021-01-27 07:56:18% achieves the same as deal(newVals{:})唯一的其他方式我知道如何做(没有foor循环)是使用arrayfun来迭代数组中的每个结构:% make a struct arrayarr = [ struct('val',0,'id',1), struct('val',0,'id',2),... -
在MATLAB中定义结构体数组 -- 支持代码生成
2020-04-27 20:02:37最近使用MATLAB代码生成,结构体数组的问题困扰许久,先将支持代码生成的结构体数组创建方法总结如下,主要参考MATLAB帮助文档。 0. MATLAB中的结构体 结构体是使用被称为字段的数据容器将相关数据组合在一起的一种... -
MATLAB批量处理结构体数组方法
2021-01-05 18:59:07当遇到结构体数组,而且需要对该结构体下相同字段的做一些批量操作时,一般的方法是进行for循环,但是这样看起来不太优雅。 批量操作结构体数组中特定的字段 下面介绍一种快捷实用的方法: 例如,现在有结构体 ... -
mysql array struct_matlab多维数组、结构体数组
2021-03-03 18:00:171、多维数组第三维称为...这样就得到的A三维数组为2*2*3double2、结构体数组(我学这个的目的是为了将不同维度的二维数组存放在一块,将不同的二维数组赋值给新的数组,方便循环遍历)结构体数组定义--赋值方式或者用... -
matlab多维数组、结构体数组
2017-12-16 11:07:001、多维数组 第三维称为页,需要注意的是每一页存放的二维数组维度要一致,也就是行列数要一致。。。 a=[1,2;...2、结构体数组 (我学这个的目的是为了将不同维度的二维数组存放在一块,将不同... -
Matlab新建struct结构体数组
2017-08-13 21:05:06struct在matlab中是用来建立结构体数组的。通常有两种用法:s = struct('field1',{},'field2',{},...) 这是建立一个空的结构体,field1,field2是域名称;s = struct('field1',values1,'field2',values2,...) 这是在... -
Matlab 结构体数组 基础知识 struct(自学文档)
2021-01-28 21:55:29结构体数组 全页展开 说明 结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。可以使用structName.fieldName格式的圆点表示法来访问字段中的数据。 创建... -
Matlab 结构体数组
2015-01-05 18:57:32两种定义结构体的方式:直接引用和使用struct函数 直接引用 1. 建立struct对象不需要事先声明,直接使用就行 x.real = 0; % 创建字段(field)名为real,并为该字段赋值为0 x.imag = 0 % 为x创建一个新的字段imag... -
matlab结构体、数组和单元数组类型的创建
2021-01-18 15:38:23文章目录matlab结构体、数组和单元数组类型的创建matlab结构体类型数组类型单元数组类型 matlab结构体类型 通过字段赋值创建结构体 创建格式: 结构体名称.字段名称 样例: >> student.name='Alan'; >&... -
matlab 怎么建立结构体数组?
2017-01-11 17:10:00怎么定义一个结构体数组,使数组的每个元素是一个结构体变量。像这样:a=(1,2)a(1)=struct('name',0,'num',0)a(1)=struct('name',0,'num',0) 匿名|浏览 10361 次 发布于2013-04-01 17:34 ...