matlab结构体、数组和单元数组类型的创建
matlab结构体、数组和单元数组类型的创建
@
matlab结构体类型
通过字段赋值创建结构体
创建格式:
结构体名称.字段名称
样例:
>> student.name='Alan';
>> student.grade=6;
>> student.subject={'Chinese','math','English'};
>> student student = 包含以下字段的 struct: name: 'Alan'
grade: 6
subject: {'Chinese' 'math' 'English'} >> student.result={99,99,99}; %可以对已经创建好的结构体再次增加结构体成员
>> student student = 包含以下字段的 struct: name: 'Alan'
grade: 6
subject: {'Chinese' 'math' 'English'}
result: {[99] [99] [99]} >>
使用struct函数来创建
单个结构体创建使用语法:
StrArray=struct('field1',var1,'field2',var2,'field3',var3,'field4',var4,...'fieldn',varn,)
样例:
>> S=struct('A','AAA','B',99,'C',100) S = 包含以下字段的 struct: A: 'AAA'
B: 99
C: 100
结构体数组的创建:
创建元素相同的结构体数组
使用repmat函数:
>> help repmat
repmat - 重复数组副本 此 MATLAB 函数 返回一个数组,该数组在其行维度和列维度包含 A 的 n 个副本。A 为矩阵时,B 大小为 size(A)*n。 B = repmat(A,n)
B = repmat(A,r1,...,rN)
B = repmat(A,r)
另请参阅 bsxfun, kron, meshgrid, ndgrid, repelem, reshape repmat 的参考页
名为 repmat 的其他函数
注意:如果在要复制的元素后面只有一个n,将生成一个矩阵,行和列对被复制的数均扩大n倍。如果是从1-n的数则生成的是一个一维的数组。
>> repmat(32,5) ans = 32 32 32 32 32
32 32 32 32 32
32 32 32 32 32
32 32 32 32 32
32 32 32 32 32 >> student student = 包含以下字段的 struct: name: 'Alan'
grade: 6
subject: {'Chinese' 'math' 'English'}
result: {[99] [99] [99]}
>> C=repmat(student,1,2,3,4,5) C = 包含以下字段的 5-D struct 数组: name
grade
subject
result >> C(1) ans = 包含以下字段的 struct: name: 'Alan'
grade: 6
subject: {'Chinese' 'math' 'English'}
result: {[99] [99] [99]} %% 如果被复制的数原本就是一个数组的话
>> S=repmat(struct('A','AAA','B',98,'C',100),1,2) S = 包含以下字段的 1×2 struct 数组: A
B
C
>> B=repmat(S,3) B = 包含以下字段的 3×6 struct 数组: %行和列同样都乘n A
B
C结构体创建:
>> S=repmat(struct('A','AAA','B',98,'C',100),1,2) S = 包含以下字段的 1×2 struct 数组: A
B
C >> S(1) ans = 包含以下字段的 struct: A: 'AAA'
B: 98
C: 100 >> S(2) ans = 包含以下字段的 struct: A: 'AAA'
B: 98
C: 100 >>
结构体数组的调用方式就是结构体数组名+(下标) 下标从1开始
创建结构体数组且元素不同
写完成员名,对其赋值时用大括号括起来写多个值。
>> ss=struct('A',{'AAA','BBB'},'B',{98,99}) ss = 包含以下字段的 1×2 struct 数组: A
B >> ss(1) ans = 包含以下字段的 struct: A: 'AAA'
B: 98 >> ss(2) ans = 包含以下字段的 struct: A: 'BBB'
B: 99 >>
如果仅仅对一个结构体元素进行完全初始化,matlab会把其他没有初始化的元素缺少的值从上一个初始过的元素对应位置的值复制到缺少的地方来。
样例:
cc = 包含以下字段的 1×2 struct 数组: A
B >> cc(1) ans = 包含以下字段的 struct: A: 'AAA'
B: 50 >> cc(2) ans = 包含以下字段的 struct: A: 'AAA'
B: 85
样例2:
>> dd=struct('A','AAA','B',{98,87,100}) dd = 包含以下字段的 1×3 struct 数组: A
B
数组类型
阵列(数组)强调对元素的运算,而矩阵则采用线性代数的运算方式。
- 直接赋值法创建数组
>> arr=[1 2 3 4 5 6 7 8 9]
arr =
1 2 3 4 5 6 7 8 9
>>
使用 :来创建数组
从i开始,默认步长为1,到k结束。k可以是非整数,如果是非整数,最后的上界小于等于k
Array=i:k
>> arr1=1:9 %生成升序数组 arr1 = 1 2 3 4 5 6 7 8 9 >> arr3=10-arr1 %生成降序数组 arr3 = 9 8 7 6 5 4 3 2 1 >> arr4=1:9.5 %如果是非整数,最后的上界小于等于k arr4 = 1 2 3 4 5 6 7 8 9
生成以 i开始,以j为步长,到k结束的数组.i,j,k不必为整数。如果j=0,返回一个空数组;如果i>k,返回一个空数组。
Array=i :j : k
>> arr5=2:2:14 arr5 = 2 4 6 8 10 12 14 >> arr6=14:2:2 arr6 = 空的 1×0 double 行向量 >> arr7=2:0:8 arr7 = 空的 1×0 double 行向量 >> arr8=1.2:2.3:8.4 arr8 = 1.2000 3.5000 5.8000 8.1000 >>
知道数组上界和下界创建已知固定元素个数的等差数组
使用函数linspace(a,b,n),n必须为整数!
>> help linspace
linspace - 生成线性间距向量 此 MATLAB 函数 返回包含 x1 和 x2 之间的 100 个等间距点的行向量。 y = linspace(x1,x2)
y = linspace(x1,x2,n) 另请参阅 colon, logspace linspace 的参考页
名为 linspace 的其他函数 >>
样例:
>> arr9=linspace(2,8,4) arr9 = 2 4 6 8 >> arr10=linspace(2.1,8.4,3) arr10 = 2.1000 5.2500 8.4000 >>
创建空数组
当数组的元素个数为0时,称数组为空,空数组
>> empty=[]
empty =
[]
单元数组类型
单元数组的每一个元素被称为单元,每一个单元可以版阔任意类型,可以是数值数组,可以是字符串数组等等。每一个单元都可以由不同的内存和内存占用空间。单元数组也可以是一维、二维或者多维。单元数的存在意义是为了把不同类型的数据归并到一个数组中。
单元数组的创建
直接赋值法创建。
单元数组采用大括号{}来创建,使用,或者空格来区分相邻的单元,使用;来区分行。
>> C={'x',[1,2;3,4];pi,'sefd'} C = 2×2 cell 数组 {'x' } {2×2 double}
{[3.1416]} {'sefd' } >>
采用函数cell来创建空数组
>> help cell
cell - 元胞数组 元胞数组是一种包含名为元胞的索引数据容器的数据类型,其中的每个元胞都可以包含任意类型的数据。元胞数组通常包含文本列表、文本和数字的组合或者不同大小的数值数组。通过将索引括在圆括号
() 中可以引用元胞集。使用花括号 {} 进行索引来访问元胞的内容。 C = cell(n)
C = cell(sz1,...,szN)
C = cell(sz)
D = cell(obj) 另请参阅 cell2mat, cell2struct, cell2table, iscell, mat2cell, num2cell,
struct2cell, table2cell cell 的参考页
名为 cell 的其他函数 >>
调用格式:
cellname=cell(m,n) % 创建一个mxn的单元空数组
样例:
>> cell(2,2) ans = 2×2 cell 数组 {0×0 double} {0×0 double}
{0×0 double} {0×0 double} >> cell(2) % 仅输入mx相当于生成mxm的单元数组 ans = 2×2 cell 数组 {0×0 double} {0×0 double}
{0×0 double} {0×0 double} >> cell(1) ans = 1×1 cell 数组 {0×0 double} >>
空单元数组的存在意义:
单元数组的内存空间的动态分配的,使用cell函数创建空数组是为了给该数组分配连续的存储空间,以此节约内存占用,提高效率。
单元数组的寻访
对单元数组C,C(m,n)指的是单元数组中的m行n列的单元,而C{m,n}指的是单元数组中m行n列单元的内容。
样例:
>> C
C =
2×2 cell 数组
{'x' } {2×2 double}
{[3.1416]} {'sefd' }
>> C(2,2)
ans =
1×1 cell 数组
{'sefd'}
>> C{2,2}
ans =
'sefd'
>>
- 单元数组的操作
对单元数组的单元进行编辑
编辑方式:左边是单元数组第m行n列的内容,右边将被赋给单元的值。
C{1,1}='adfdsd'
单元数组的合并:与字符串合并类似,只不过用的大括号{}。
% 已知单元数组 a,b;合并a b;
c={a b}
>> C C = 2×2 cell 数组 {'x' } {2×2 double}
{[3.1416]} {'sefd' } >> D=repmat(C,1) D = 2×2 cell 数组 {'x' } {2×2 double}
{[3.1416]} {'sefd' } >> E={C D} E = 1×2 cell 数组 {2×2 cell} {2×2 cell} >>
单元数组指定单元的删除:只需要将空矩阵赋给该单元。
C{m,n}=[]
>> C{1,1}=[] C = 2×2 cell 数组 {0×0 double} {2×2 double}
{[ 3.1416]} {'sefd' } >>
利用函数reshape修改数组的形状
调用格式:将数组C变成M行,N列的新数组并返回给trimC,而数组C的形状并没有变。
trimC=reshape(C,M,N)
>> help reshape
reshape - 重构数组 此 MATLAB 函数 使用大小向量 sz 重构 A 以定义 size(B)。例如,reshape(A,[2,3]) 将 A 重构为一个 2×3 矩阵。sz
必须至少包含 2 个元素,prod(sz) 必须与 numel(A) 相同。 B = reshape(A,sz)
B = reshape(A,sz1,...,szN) 另请参阅 colon, permute, repmat, shiftdim, squeeze reshape 的参考页
名为 reshape 的其他函数 >>
样例:
>> D D = 2×2 cell 数组 {'x' } {2×2 double}
{[3.1416]} {'sefd' } >> R=reshape(D,4,1) R = 4×1 cell 数组 {'x' }
{[ 3.1416]}
{2×2 double}
{'sefd' } >> D %D没有发生改变 D = 2×2 cell 数组 {'x' } {2×2 double}
{[3.1416]} {'sefd' } >> D=reshape(D,4,1) % 将D自身重构 D = 4×1 cell 数组 {'x' }
{[ 3.1416]}
{2×2 double}
{'sefd' } >>
matlab结构体、数组和单元数组类型的创建的更多相关文章
- matlab学习笔记(一)单元数组
matlab学习笔记(一)单元数组 1.floor(x) :取最小的整数 floor(3.18)=3,floor(3.98)=3 ceil(x) :取最大的整数 ceil(3.18)=4,ceil( ...
- C# 结构体定义 转换字节数组 z
客户端采用C++开发,服务端采用C#开发,所以双方必须保证各自定义结构体成员类型和长度一致才能保证报文解析的正确性. [StructLayoutAttribute(LayoutKind.Sequent ...
- 读陈浩的《C语言结构体里的成员数组和指针》总结,零长度数组
原文链接:C语言结构体里的成员数组和指针 复制例如以下: 单看这文章的标题,你可能会认为好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Lar ...
- (原创)结构体自动化转为char数组的实现
结构体自动化转换为char数组这个需求,来自于一个最近开发的一个项目,在项目开发过程中遇到一个小问题,需要将各种结构体拷贝到char数组中,这对于一个简单的结构体来说是很简单的事情,比如下面这个只有整 ...
- Swift超详细的基础语法-结构体,结构体构造器,定义成员方法, 值类型, 扩充函数
知识点 基本概念 结构体的基本使用 结构体构造器(构造函数/构造方法) 结构体扩充函数(方法), 又称成员方法 结构体是值类型 1. 基本概念 1.1 概念介绍 结构体(struct)是由一系列具有相 ...
- Matlab结构体定义
定义一个Matlab结构体的代码,以飞行器为例: classdef flightpro properties pos = [ ]; RGB = [ ]; rate; type; end end
- 深入理解指针—>结构体里的成员数组和指针
单看这文章的标题,你可能会觉得好像没什么意思.你先别下这个结论,相信这篇文章会对你理解C语言有帮助.这篇文章产生的背景是在微博上,看到@Laruence同学出了一个关于C语言的题,微博链接.微博截图如 ...
- C语言结构体里的成员数组和指针
struct test{ int i; char *p; }; struct test *str; ; char *b = "ioiodddddddddddd"; str = (s ...
- JNA结构体参数传递,Java数组
JNA以结构体数组为参数进行调用: ////// C++ // student 结构体定义 typedef struct { int age; char name[20]; }Student; // ...
随机推荐
- MFC多文档程序启动无子窗口的实现
刚学MFC的我们,肯定会从一个基本MFC程序开始. 而VC++6.0的MFC基础类提供了三种创建方式:单文档.多文档.对话框. 当我们创建多文档应用程序的时候,会自动启动一个子窗口. 在我们平时使用软 ...
- Echars统计图的使用
第一步去官网挑选自己需要的图形了. 官网地址:https://echarts.baidu.com/ 第二步按照官网的demo,下载需要的js组件并放到自己的项目中. 第三步仿照demo创建需要的div ...
- 【Notes_1】现代图形学入门——计算机图形学概述
跟着闫令琪老师的课程学习,总结自己学习到的知识点 课程网址GAMES101 B站课程地址GAMES101 课程资料百度网盘[提取码:0000] 计算机图形学概述 计算机图形学是一门将模型转化到屏幕上图 ...
- idea更改包名无法加载主类解决
把工程下面的.idea目录下的workspace.xml里面的路径改成你最新的路径即可. <option name="SPRING_BOOT_MAIN_CLASS" valu ...
- SpringBoot启动报错 Disconnected from the target VM, address: '127.0.0.1:2227', transport: 'socket'
今天搭建了一个SpringBoot项目,刚启动就报错 Disconnected from the target VM, address: '127.0.0.1:2227', transport: 's ...
- Java练习——抽象类
需求: 2辆宝马,1辆别克商务舱,1辆金龙(34)座,租5天共多少租金. 轿车 客车(金杯.金龙) 车型 别克商务舱GL8 宝马550i 别克林荫大道 <=16座 >16座 日租费(元 ...
- LeetCode-二叉树的镜像
二叉树的镜像 二叉树的镜像 给定一个二叉树,输出二叉树的镜像. 只需要使用一个简单的递归,分别对左右子树反转后再对当前结点进行反转. #include<iostream> #include ...
- 2020年12月-第01阶段-前端基础-认识HTML
1. HTML 初识 HTML 指的是超文本标记语言 (Hyper Text Markup Language)是用来描述网页的一种语言. HTML 不是一种编程语言,而是一种标记语言 (markup ...
- 【Arduino学习笔记04】消抖动的按键切换
"开关抖动": 由于按键是基于弹簧-阻尼系统的机械部件,所以当按下一个按键时,读到的信号并不是从低到高,而是在高低电平之间跳动几毫秒之后才最终稳定. 代码解读: 1 const i ...
- MySQL数据库之一
数据库简介 数据库分类 关系型数据库(SQL):(狭义可以理解为行和列) MySQL,Oracle,Sql Server, DB2 通过表和表之间,行和列之间的关系进行存储 非关系型数据库(NoSQL ...