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; // ...
随机推荐
- 微信小程序(八)-项目实例(原生框架 MINA转云开发)==03-云开发-数据库
云数据库 云数据库开发文档:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database.html 1.新建云数据库( ...
- oracle ORA-00257
su - oracle sqlplus /nolog conn / as sysdba select * from v$flash_recovery_area_usage; select sum(pe ...
- Python和JavaScript在使用上有什么区别?
转载请注明出处:葡萄城官网,葡萄城为开发者提供专业的开发工具.解决方案和服务,赋能开发者. 原文出处:https://www.freecodecamp.org/news/python-vs-javas ...
- Java流程控制:顺序结构
一.流程控制 Java中的流程控制语句可以这样分类:顺序结构.选择结构.循环结构.这三种结构就足够解决所有的问题了! 二.顺序结构 描述: Java流程控制的基本结构就是顺序结构,除非特别指明,否则J ...
- idea更改包名无法加载主类解决
把工程下面的.idea目录下的workspace.xml里面的路径改成你最新的路径即可. <option name="SPRING_BOOT_MAIN_CLASS" valu ...
- wxWidgets源码分析(9) - wxString
目录 wxString wxString的中文字符支持 Windows Linux Unicode Linux UTF-8 总结 wxString与通用字符串的转换 wxString对象的创建 将wx ...
- Thinkphp3分析与审计
0x00 前言: 这篇是去年组内分享的时候给小伙伴写的0基础快速审计tp3系列的文章,主要是对架构做个分析以及审计一些sql注入漏洞~ 现在想想打算放出来,过了一年了,可能里面有一些问题,望看到的大佬 ...
- js 数组的浅拷贝和深拷贝
1.背景介绍 javascript分原始类型与引用类型.Array是引用类型,直接用"="号赋值的话,只是把源数组的地址(或叫指针)赋值给目的数组,指向的是同一个内存地址,其中一个 ...
- WDN302国产化网络存储控制模块
WDN302是一款网络存储控制模块,实现对NAS和IP-SAN的混合支持,通过以太网对海量存储的访问,实现数据的存储.共享.恢复和防丢失. 飞腾 FT1500A/16处理器,主频 1.5GHz: 支持 ...
- WPF 基础 - 图形的效果与滤镜
UIElement 有 BitmapEffect 和 Effect 属性,BitmapEffect 是由 CPU 的运算能力实现的,比较耗性能,推荐使用 Effect: Effect 包括但不限于 D ...