matlab结构体的创建与元素访问

觉得有用的话,欢迎一起讨论相互学习~

参考文献

https://ww2.mathworks.cn/help/matlab/structures.html?searchHighlight=结构体&s_tid=doc_srchtitle

https://ww2.mathworks.cn/help/matlab/matlab_prog/create-a-structure-array.html

https://ww2.mathworks.cn/help/matlab/matlab_prog/access-data-in-a-structure-array.html

https://ww2.mathworks.cn/help/matlab/matlab_prog/access-data-in-nested-structures.html

https://ww2.mathworks.cn/help/matlab/matlab_prog/access-multiple-elements-of-a-nonscalar-struct-array.html

概念

  • 对于一个结构体而言,(1),(2),(3)...称为同一个结构体的不同元素,.1,.2,.3...称为一个结构体的属性
  • 带有可以包含各种类型和大小的数据的命名字段的数组
  • 结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。使用 structName.fieldName 格式的圆点表示法来访问结构体中的数据。

函数

创建结构体数组

  • 下面的示例说明了如何创建结构体数组。结构体是使用被称为字段的数据容器将相关数据组合在一起的一种数据类型。每个字段都可以包含任意类型或任意大小的数据。将患者记录存储在含有字段 name、billing 和 test 的标量结构体中

  • 数组中的每条患者记录都是 struct 类的结构体。由结构体构成的数组通常称为结构体数组。与其他 MATLAB 数组类似,结构体数组可以具有任意维度。
  • 结构体数组具有下列属性:
    • 数组中的所有结构体都具有相同数目的字段。
    • 所有结构体都具有相同的字段名称。
    • 不同结构体中的同名字段可包含不同类型或大小的数据。
    • 数组中新结构体的任何未指定字段均包含空数组。
patient(3).name = 'New Name';
patient(3)
ans = struct with fields:
name: 'New Name'
billing: []
test: []

访问结构体中的元素

  • 结构体也分为标量结构体和结构体数组,结构体数组可以通过结构体数组的索引进行访问,而标量结构体可以通过结构体名称进行访问。

访问标量结构体

  • 要访问字段的一部分内容,请添加适合字段中数据的大小和类型的索引
  • 如果特定的字段包含 元胞数组 ,使用 花括号{} 访问数据

访问非标量结构体数组的属性

  • 通过将文件 mandrill.mat 中的数据加载到数组 S 的 第二个元素 中来创建一个 非标量数组
S(2) = load('mandrill.mat')
  • 一个结构体数组的每个元素都必须具有相同的字段。 clown.mat 和 mandrill.mat 都包含变量 X、map 和 caption。

S 是一个 1×2 的数组。

S =

  1×2 struct array with fields:

    X
map
caption

对于非标量结构体,访问特定字段的语法为 structName(indices).fieldName。 重新显示 clown 图像,并指定 clown 结构体的索引 (1):

image(S(1).X)
colormap(S(1).map)
添加索引以选择并重新显示字段内容的左上角: upperLeft = S(1).X(1:50,1:80);
image(upperLeft)

注意

仅当引用结构体数组的 单个元素 时,才能为字段的部分内容建立索引。 MATLAB® 不支持诸如 S(1:2).X(1:50,1:80) 的语句,后者尝试为结构体的多个元素的字段建立索引。

访问嵌套结构体中的数据

  • 此示例演示了如何为嵌套于另一个结构体中的结构体建立索引。访问特定字段中的数据的一般语法为

    `structName(index).nestedStructName(index).fieldName(indices)``
  • 当结构体为 标量 (1×1) 时,无需包括索引以引用单个元素。例如,创建一个标量结构体 s,其中字段 n 是一个嵌套的标量结构体,其中包含字段 a、b 和 c:
s.n.a = ones(3);
s.n.b = eye(4);
s.n.c = magic(5);
  • 访问字段 b 的第三行:
third_row_b = s.n.b(3,:)
变量 third_row_b 包含 eye(4) 的第三行。 third_row_b =
0 0 1 0
  • 扩展 s,以便 s 和 n 都为非标量 (1×2):
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 现在包含下图中所示的数据。

  • 访问 n(位于 s 的第一个元素中)的第二个元素的字段 b 中的数组部分内容:
part_two_eye = s(1).n(2).b(1:2,1:2)
这将返回 2*eye(4) 的左上角 2×2 的部分: part_two_eye =
2 0
0 2

访问非标量结构体数组的元素

  • 访问和处理一个非标量结构体数组的多个元素中的数据
  1. 创建一个1*3的结构体s,其中包含字段f:
s(1).f = 1;
s(2).f = 'two';
s(3).f = 3 * ones(3);
  • 尽管数组中的 每个结构体必须具有相同的字段数和相同的字段名称,但字段的类型和大小可以不同 引用多个元素的同一字段 s(1:3).f 或者 s.f
  • matlab 以逗号分隔列表的形式返回元素中的数据
    ans =
    1 ans =
    two ans =
    3 3 3
    3 3 3
    3 3 3
    • 不能使用v=s.f语法将该列表分配给单个变量,因为各个字段包含的数据类型可能不同,但是可以 将列表项分配给相同数量的变量 或者 分配给元胞数组
    [v1, v2, v3] = s.f;
    c = {s.f};
  1. 如果所有字段均包含相同类型的数据并且可以构成超矩形,则可以串联列表项。例如,创建一个包含字段 f(具有数值标量)的结构体 nums,然后串联字段中的数据:
nums(1).f = 1;
nums(2).f = 2;
nums(3).f = 3; allNums = [nums.f]
该代码返回 allNums =
1 2 3
  1. 如果要使用相同运算处理数组的每个元素,请使用 arrayfun 函数。例如,统计数组 s 中每个结构体的字段 f 的元素数。
numElements = arrayfun(@(x) numel(x.f), s)
语法 @(x) 可以创建匿名函数。此代码对数组 s 的每个元素调用 numel 函数,例如 numel(s(1).f),并返回 numElements =
1 3 9

matlab学习笔记12_2创建结构体数组,访问标量结构体,访问非标量结构体数组的属性,访问嵌套结构体中的数据,访问非标量结构体数组中多个元素的字段的更多相关文章

  1. matlab学习笔记13_3创建函数句柄

    一起来学matlab-matlab学习笔记13函数 13_3 创建函数句柄 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考文献 https://ww2.mathworks.cn/help ...

  2. matlab学习笔记(一)单元数组

    matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x)  :取最大的整数 ceil(3.18)=4,ceil( ...

  3. matlab学习笔记4--MAT文件的保存和读取

    一起来学matlab-matlab学习笔记4 数据导入和导出_1 MAT文件的保存和读取 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考书籍 <matlab 程序设计与综合应用&g ...

  4. matlab学习笔记 bsxfun函数

    matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下. ...

  5. Django:学习笔记(2)——创建第一个应用

    Django:学习笔记(2)——创建第一个应用 创建应用 在 Django 中,每一个应用都是一个 Python 包,并且遵循着相同的约定.Django 自带一个工具,可以帮你生成应用的基础目录结构, ...

  6. 【数学建模】MATLAB学习笔记——函数式文件

    MATLAB学习笔记——函数式文件 引入函数式文件 说明: 函数式文件主要用于解决计算中的参数传递和函数调用的问题. 函数式的标志是它的第一行为function语句. 函数式文件可以有返回值,也可以没 ...

  7. Matlab学习笔记 figure函数

    Matlab学习笔记 figure函数 matlab中的 figure 命令,能够创建一个用来显示图形输出的一个窗口对象.每一个这样的窗口都有一些属性,例如窗口的尺寸.位置,等等.下面一一介绍它们. ...

  8. matlab学习笔记---(1)

    Matlab学习笔记 一. Desktop Basics (Matlab 基础知识) 当你打开Matlab的时候,matlab按照以下默认的方式展示出来. 该桌面主要包括以下几部分内容: 当前文件夹: ...

  9. Java学习笔记-多线程-创建线程的方式

    创建线程 创建线程的方式: 继承java.lang.Thread 实现java.lang.Runnable接口 所有的线程对象都是Thead及其子类的实例 每个线程完成一定的任务,其实就是一段顺序执行 ...

随机推荐

  1. cmds系统数据库源端大表数据更新优化

    cmds系统数据库源端大表数据更新优化 以下脚本可以用于将表按照rowid范围分区,获得指定数目的rowid Extent区间(Group sets of rows in the table into ...

  2. 如何升级pip3

    使用pip3安装软件的时候提示要升级pip3“You are using pip version 10.0.1, however version 18.0 is available.You shoul ...

  3. 使用Postman做接口测试

    Postman是一个接口测试工具,在做接口测试的时候,Postman相当于一个客户端,它可以模拟用户发起的各类HTTP请求,将请求数据发送至服务端,获取对应的响应结果, 从而验证响应中的结果数据是否和 ...

  4. jmeter,badboy,jar包文件 常数吞吐量计时器?

    badboy录制脚本 1.按f2 红色开始录制 URL输入:https://www.so.com/ 2.搜索框输入zxw 回车键搜索 3.选中关键字(刮例如zxw软件——>tools——> ...

  5. 事物分析、静态分析(结构分析)与UML

    事物分析: 1)要素分析: 2)结构(组织.关系)分析: 符合软件中的数据库观点和UML观点: 符合数据结构的观点. 符合由点到面的观点. 将关系和元素提到了同等重要的地位. 符合哲学中普遍联系的观点 ...

  6. (3)使用Android手机作为树莓派的屏幕

    https://jingyan.baidu.com/album/676629977483b154d51b848e.html

  7. (2)在树莓派安装运行在Python3上的OpenCV

    https://www.jianshu.com/p/56929416b4a1 http://www.eeworld.com.cn/afdz/article_2018030511619.html htt ...

  8. 【luogu 5395】 【模板】第二类斯特林数·行

    code: #include <bits/stdc++.h> #define ll long long #define setIO(s) freopen(s".in", ...

  9. jq 轮播图 转载-周菜菜

    <style> li{list-style-type:none ; display:inline; width:90px; height:160px; float:left; } .pic ...

  10. podium layout 说明

    layout 主要是进行podlets 的组合,同时也提供了context ,fallback,以及传递参数的处理 基本代码 const express = require('express'); c ...