精华内容
下载资源
问答
  • matlab 结构体struct函数使用方法

    万次阅读 多人点赞 2019-09-09 18:59:24
    1.struct函数直接定义 查阅文档是这样的:struct(field1,value1,field2,value2,.....) ...注意:这里先提一句matlab中的文档显示Any nonscalar cell arrays in the set value1,...,valueN must h...

    1.struct函数直接定义

    查阅文档是这样的:struct(field1,value1,field2,value2,.....

    上面这个格式很重要记住

    field1和field2称为这个结构体的字段,要熟悉字段这个词语。

    注意:这里先提一句 matlab中的文档显示Any nonscalar cell arrays in the set value1,...,valueN must have the same dimensions.

    意思是 任何非标量元胞数组必须尺寸相同,后面会需要用到

    目录

    1.struct函数直接定义

    查阅文档是这样的:struct(field1,value1,field2,value2,.....)

    1.1 先举例正常的:s = struct('f1','name','f2','blue')

    1.2 如果f2变成普通数组呢?

    1.3 这里复习一下元胞数组

    1.4 再变化,如果其中一个字段比如f2变成元胞数组即cell型数组呢?

    情况一:存在一个value内容为n个元素的元胞数组,不管是1×n还是n×1,只要行数或者列数不超过2

    情况二:value中全部是元胞数组

    2 结束语



    1.1 先举例正常的:s = struct'f1','name','f2','blue')

    所以创造了一个s结构体,这个s结构体包括两个字段,一个字段是一种内容。此时可以看到这个结构体大小是1×1,原因是这里面每个字段的大小是1×1


    1.2 如果f2变成普通数组呢?

    结果如下图


    1.3 这里复习一下元胞数组

    防止有人忘记或者小白看不懂(当然我也是小白233333),具体见我上篇博客

    元胞数组(cell)创建及赋值:

    cell(n),创造n×n大小的数组

    从这里能看到两种括号的应用区别了吗?当用{ }时,代表直接写值,用()定位时,赋值就必须在内容外层再套一层{ }

    举例:a = {'NAME',[1 2 3;2 4 6],ones(2,3),{'color',[1 2]}}

    用逗号 “”做间隔 

    根据上图里第4个框内内容可知,cell内可以再次赋值一个cell型数组的


    1.4 再变化,如果其中一个字段比如f2变成元胞数组即cell型数组呢?

    举例

    s = struct('f1','name','f2',{[1 2 3;2 4 6],'color',ones(2,2)})

    将f2的内容变成了一个大小为1×3的元胞数组,此时观察结构体内容值

    会发现字段变成了3,对比前面字段是每个field的名字而不同,那么这种不同是为什么呢?

    没有为什么哈哈哈,规则就是这样的,当存在元胞数组时,那么有两种情况

    • 情况一:存在一个value内容为n个元素的元胞数组,不管是1×n还是n×1,只要行数或者列数不超过2

    那么字段会变成n大小,同时结构体数组大小为元胞数组大小,就像上面例子f1也会像f2一样变成1×3,但是f1只有一个,怎么办呢,就会默认全部填充这一个,填充成和元胞数组一样大小的

    • 情况二:value中全部是元胞数组

    一开头我介绍的那句文档中翻译出来的话,全部是元胞数组的话,必须尺寸相同才可以

    不然就会出现,比如我把f1位置改成两个元素的元胞数组

    s = struct('f1',{'name',[2 3 4]'},'f2',{[1 2 3,2 4 6],'color',ones(2,2),'laa'})


    2 结束语

    至此struct函数讲解结束,还是非常简单的,如果理解不清楚一定要亲自把代码自己在matlab上输一遍运行看结果,尝试了就知道啦!!

    不要偷懒哦!!!

    展开全文
  • MATLAB struct函数(结构体数组)

    千次阅读 2021-01-06 15:56:30
    文章目录语法说明输入参数示例例1: 在结构体中存储相关数据变量例2: 具有一个字段的结构体例3: 具有多个字段的结构体例4: 带有空字段的结构体例5: 包含元胞数组的字段例6: 空结构体例7: 嵌套结构体 语法 s = struct ...

    语法

    s = struct
    s = struct(field,value)
    s = struct(field1,value1,...,fieldN,valueN)
    s = struct([])
    s = struct(obj)
    

    说明

    s = struct    %创建不包含任何字段的标量 (1×1) 结构体。
    
    s = struct(field,value) 
    %创建具有指定字段和值的结构体数组。
    %value 输入参数可以是任何数据类型,例如数值、逻辑值、字符或元胞数组
    
    %如果value不是元胞数组,或者value是标量元胞数组,则s是标量结构体
    %例如,s = struct('a',[1 2 3]) 创建一个1×1结构体,其中s.a = [1 2 3]
    
    %如果value是非标量元胞数组,则s是维度与value相同的结构体数组。s的每个元素包含 value 的对应元素
    %例如,s = struct('x',{'a','b'},'y','c') 返回 s(1).x = 'a'、s(2).x = 'b'、s(1).y = 'c' 和 s(2).y = 'c'
    
    %如果value是空元胞数组 {},则 s 是空 (0×0) 结构体
    
    s = struct(field1,value1,...,fieldN,valueN) 创建多个字段
    %集合value1,...,valueN中的任何非标量元胞数组必须具有相同的维度
    
    %如果value的所有输入都不是元胞数组,或者value中作为元胞数组的所有输入都是标量,则s是标量结构体
    
    %如果所有value输入都是非标量元胞数组,则s具有与非标量元胞数组相同的维度
    %对于类型为标量元胞数组或任何其他数据类型的数组的任何 value,struct将value 的内容插入s的所有元素的相关字段中
    
    %如果任何value输入是空元胞数组{},则输出s是空 (0×0) 结构体
    %要指定一个空字段并保留其他字段的值,请改用[]作为value输入
    
    s = struct([]) 创建不包含任何字段的空 (0×0) 结构体
    
    s = struct(obj) 创建包含与 obj 的属性对应的字段名称和值的标量结构体
    %struct 函数不会转换 obj,而是将 s 创建为一个新的结构体。此结构体不保留类信息,因此专用、受保护和隐藏的属性在 s 中变为公共字段
    %struct 函数在您使用此语法时会发出警告
    

    输入参数

    filed :字段名称
    字段名称,指定为字符向量或字符串标量。有效字段名称以字母开头,可以包含字母、数字和下划线。字段名称的最大长度是 namelengthmax 函数返回的值

    value:值
    值,指定为任何类型的数组。如果 value 有任何输入是非标量元胞数组,则所有非标量元胞数组输入必须具有相同的维度。如果 value 有任何输入是空元胞数组 {},则输出是空结构体数组。要指定单个空字段,请使用 []。

    obj:对象
    对象,指定为标量或对象数组。struct 函数将 obj 的属性复制到新标量结构体的字段中。struct 函数不能基于大多数基本数据类型创建结构体。例如,如果 obj 具有 double 或 char 数据类型,则 struct 会发出错误消息。但是,struct会将表或时间表的属性以结构体形式返回。

    示例

    例1: 在结构体中存储相关数据变量

    %通过使用圆点表示法添加字段来创建一个结构体
    data.x = linspace(0,2*pi);
    data.y = sin(data.x);
    data.title = 'y = sin(x)'
    

    结果如下所示:
    在这里插入图片描述

    %绘制正弦波,这里按字段名称引用 x 和 y 值的数组,然后添加标题
    plot(data.x,data.y)
    title(data.title)
    

    结果如下所示:
    在这里插入图片描述

    例2: 具有一个字段的结构体

    %创建包含一个字段的非标量结构体
    field = 'f';
    value = {'some text';
             [10, 20, 30];
             magic(5)};
    s = struct(field,value)
    
    %查看每个元素的内容
    s.f
    

    结果如下所示:
    在这里插入图片描述

    %访问非标量结构体的字段(例如 s.f)时,MATLAB返回一个逗号分隔的列表
    %在本示例中,s.f 等效于 s(1).f, s(2).f, s(3).f
    

    在这里插入图片描述

    例3: 具有多个字段的结构体

    field1 = 'f1';  value1 = zeros(1,10);
    field2 = 'f2';  value2 = {'a', 'b'};
    field3 = 'f3';  value3 = {pi, pi.^2};
    field4 = 'f4';  value4 = {'fourth'};
    
    s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
    
    %value2 和 value3 的元胞数组是 1×2 数组,因此 s 也是 1×2 数组
    %因为 value1 是数值数组而不是元胞数组,所以 s(1).f1 和 s(2).f1 具有相同的内容
    %类似地,因为 value4 的元胞数组具有单一元素,所以 s(1).f4 和 s(2).f4 具有相同的内容
    

    结果如下所示:
    在这里插入图片描述

    例4: 带有空字段的结构体

    %创建包含一个空字段的结构体。使用 [] 指定空字段的值
    s = struct('f1','a','f2',[])
    

    结果如下所示:
    在这里插入图片描述

    例5: 包含元胞数组的字段

    field = 'mycell';
    value = {{'a','b','c'}};
    s = struct(field,value)
    

    结果如下所示:
    在这里插入图片描述

    例6: 空结构体

    %创建包含多个字段的空结构体
    s = struct('a',{},'b',{},'c',{})
    

    结果如下所示:
    在这里插入图片描述

    例7: 嵌套结构体

    %创建一个嵌套结构体,其中a是具有一个字段的结构体,该字段又包含另一个结构体
    a.b = struct('c',{},'d',{})
    %查看 a.b 的字段的名称
    fieldnames(a.b)
    

    结果如下所示:
    在这里插入图片描述

    展开全文
  • matlab操作struct

    2021-04-20 06:04:55
    1、matlab获取json文件jsonData=loadjson(jsonPath);2、获取json文件中的嵌套变量ueNum = struct(‘tPuschParIn’,jsonData.tPuschParIn).tPuschParIn.iPuschUeNum;3、获取struct某个变量的值,getfield函数value = ...

    1、matlab获取json文件

    jsonData=loadjson(jsonPath);

    2、获取json文件中的嵌套变量

    ueNum = struct(‘tPuschParIn’,jsonData.tPuschParIn).tPuschParIn.iPuschUeNum;

    3、获取struct某个变量的值,getfield函数

    value = getfield(tSystemParIn,‘iUE_RNTI’);

    4、修改struct的数组变量的第一个值

    tSystemParIn.iUE_RNTI(1) = value(i);

    5、批量修改struct变量的值

    循环signleField 得到各个变量field

    tPuschParIn = setfield(tPuschParIn,field,result);

    必须有左键,把修改后的结果重新赋值给tPuschParIn ,不然setfield不生效。

    6、整体代码如下。

    function [ueNum]=mulUeJsonSplit(jsonPath,pathName,upDown)%%

    addpath(genpath([pwd '\jsonlab']));

    jsonData=loadjson(jsonPath);

    signleField = {'MCS','Layernum','RBStart','RBNum','CodeWordNum','iPtrsEn',...

    'TimeSpace','FreqSpace','RB_offset','RE_offset','Che_Method','bDeNoiseEn'};

    ueNum = struct('tPuschParIn',jsonData.tPuschParIn).tPuschParIn.iPuschUeNum;

    for i=1:ueNum

    %%

    tSystemParIn = struct('tSystemParIn',jsonData.tSystemParIn).tSystemParIn; %struct

    value = getfield(tSystemParIn,'iUE_RNTI');

    valueLen = numel(value);

    tSystemParIn.iUE_RNTI(1) = value(i);

    for j = ueNum:valueLen-1

    tSystemParIn.iUE_RNTI(j) = 0;

    end

    %%

    tPuschParIn = struct('tPuschParIn',jsonData.tPuschParIn).tPuschParIn; %struct

    [m,n] = size(signleField);

    for j = 1:n

    field = char(signleField(j));

    value1 = getfield(tPuschParIn,field);

    valueLen1 = numel(value1);

    result = [value1(i) 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0];

    tPuschParIn = setfield(tPuschParIn,field,result);

    end

    %%

    jsonmesh=struct('tSystemParIn',tSystemParIn,...

    'tPuschParIn',tPuschParIn);

    fname=sprintf('ueId%d.json',i);

    savejson('',jsonmesh,fname);

    end

    end

    展开全文
  • 此函数将 MATLAB 结构体转换为 XML 文件。
  • matlabstruct操作

    2021-04-18 14:25:26
    结构数组的创建MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。1. 使用直接引用方式定义结构与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。建立一个复数...

    结构数组的创建

    MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。

    1. 使用直接引用方式定义结构

    与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。

    建立一个复数变量x

    x.real = 0; % 创建字段名为real,并为该字段赋值为0

    x.imag = 0 % 为x创建一个新的字段imag,并为该字段赋值为0

    x =

    real: 0

    imag: 0

    动态扩充为数组

    将x扩充为1×2的结构数组

    x(2).real = 0;

    x(2).imag = 0;

    为数组动态扩充字段

    增加字段scale:

    x(1).scale = 0;

    这样,所有x都增加了一个scale字段,而x(1)之外的其他变量的scale字段为空:

    查看结构数组的第一个元素的各个字段的内容

    x(1)

    ans =

    real: 0

    imag: 0

    scale: 0

    查看结构数组的第二个元素的各个字段的内容,注意没有赋值的字段为空

    x(2)

    ans =

    real: 0

    imag: 0

    scale: []

    应该注意的是,x的real、imag、scale字段不一定是单个数据元素,它们可以是任意数据类型,可以是向量、数组、矩阵甚至是其他结构变量或元胞数组,而且不同字段之间其数据类型不需要相同。例如:

    clear x; x.real = [1 2 3 4 5]; x.imag = ones(10,10);

    数组中不同元素的同一字段的数据类型也不要求一样:

    x(2).real = '123';

    x(2).imag = rand(5,1);

    甚至还可以通过引用数组字段来定义结构数据类型的某字段:

    x(3).real = x(1); x(3).imag = 3; x(3)

    ans =

    real: [1x1 struct]

    imag: 3

    2.使用struct函数创建结构

    使用struct函数也可以创建结构,该函数产生或吧其他形式的数据转换为结构数组。

    struct的使用格式为:

    s = sturct('field1',values1,'field2',values2,…);

    该函数将生成一个具有指定字段名和相应数据的结构数组,其包含的数据values1、valuese2等必须为具有相同维数的数据,数据的存放位置域其他结构位置一一对应的。对于struct的赋值用到了元胞数组。数组values1、values2等可以是元胞数组、标量元胞单元或者单个数值。每个values的数据被赋值给相应的field字段。

    当valuesx为元胞数组的时候,生成的结构数组的维数与元胞数组的维数相同。而在数据中不包含元胞的时候,得到的结构数组的维数是1×1的。例如:

    s = struct('type',{'big','little'},'color',{'blue','red'},'x',{3,4})

    s =

    1x2 struct array with fields:

    type

    color

    x

    得到维数为1×2的结构数组s,包含了type、color和x共3个字段。这是因为在struct函数中{'big','little'}、{'blue','red'}和{3,4}都是1×2的元胞数组,可以看到两个数据成分分别为:

    s(1,1)

    ans =

    type: 'big'

    color: 'blue'

    x: 3

    s(1,2)

    ans =

    type: 'little'

    color: 'red'

    x: 4

    相应的,如果将struct函数写成下面的形式:

    s = struct('type',{'big';'little'},'color',{'blue';'red'},'x',{3;4})

    s =

    2x1 struct array with fields:

    type

    color

    x

    则会得到一个2×1的结构数组。

    结构数组的操作

    函数名 功能描述

    deal 把输入处理成输出

    Fieldnames 获取结构的字段名

    getfield 获取结构中指定字段的值

    Rmfield 删除结构的字段(不是字段内容)

    setfield 设置结构数组中指定的字段的值

    Struct 创建结构数组

    struct2cell 结构数组转化成元胞数组

    Isfield 判断是否存在该字段

    isstruct 判断某变量是否是结构类型

    展开全文
  • 通过 matlab 结构实现数据的快速输入和轻松访问。 [输出结构] = txt2struct(文本文件,varargin) 例子 mystruct = txt2struct('testdata.csv'); % 作者: % Tim Ryan CSIRO 2007 年 12 月 18 日% 修改: % ...
  • [求助]关于matlabstruct函数 我在做hough变换检测直线,在function lines=houghlines(f,theta,rho,rr,cc,fillgap,minlength)%HOUGHLINES Extract line segments based on the Hough transform.% LINES=HOUGHLINES...
  • Matlabstruct与excel互转==struct输出为excel==struct转为tabletable输出为excel多个table输出为excel的多个sheet(struct数组每个struct转化为一个table)==excel输入struct==EXCEL读取不同sheet为不同table...
  • STRUCT2STR - 将结构转换为字符字符串,并可选择在列表框中显示其字段名称和字段值对。... 通过显示获得的字符字符串,我们得到与 Matlab 内置函数 DISP 生成的输出类似的输出,当被调用时原始结构。
  • matlab——struct

    千次阅读 2017-11-30 16:37:14
    MATLAB struct 结构数组 方法/步骤 第一,通过“.”创建结构数组。在命令行窗口输入如下代码: student.name='Jason'; student.class='class 3'; student.results={'...
  • matlab 结构(struct)数组

    2021-04-21 19:34:23
    4. 3.2 结构数组的操作MATLAB中专门用于对结构数组的操作的函数...表4.3.1 结构数组的操作函数函数名 功能描述 函数名 功能描述deal 把输入处理成输出 fieldnames 获取结构的字段名getfield 获取结构中指定字段的值...
  • Matlab:结构体Struct

    千次阅读 多人点赞 2019-12-11 08:56:14
    Matlab中创建一个结构体数组的方式有两种,分别为直接引用方式和使用struct函数。 1、使用直接引用方式创建结构体 与建立数值型数组一样,建立新struct对象不需要事先申明,可以直接引用,而且可以动态扩充。比如...
  • matlab开发-struct2csv

    2019-08-22 10:28:49
    matlab开发-struct2csv。使用列标题将结构输出到.csv文件
  • 3.输出参数 二.说明 三.示例 1.将标量结构体转换为表 2.将非标量结构体数组转换为表 3.将标量结构体作为数组处理 struct2table函数是将结构体数组转换为表。 一.语法 T = struct2table(S) T = struct2...
  • Matlab中的结构类型struct

    千次阅读 2020-03-22 21:49:57
    而且在MATLAB中实现struct比C中更为方便。 4. 3.1 结构数组的创建MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。 1. 使用直接引用方式定义结构 与建立数值型数组一样,建立新struct对象不需要事先申明...
  • struct 结构体数组 全页展开 说明 结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。可以使用structName.fieldName格式的圆点表示法来访问字段中的数据。...
  • Matlab 结构体(struct)使用

    万次阅读 多人点赞 2018-07-07 10:37:17
    而且在MATLAB中实现struct比C中更为方便。4. 3.1 结构数组的创建MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。1. 使用直接引用方式定义结构与建立数值型数组一样,建立新struct对象不...
  • matlab中的struct

    万次阅读 2017-01-13 23:51:01
    而且在MATLAB中实现struct比C中更为方便。 4. 3.1 结构数组的创建 MATLAB提供了两种定义结构的方式:直接应用和使用struct函数。 1. 使用直接引用方式定义结构 与建立数值型数组一样,建立新struct对象不需要...
  • MATLAB结构体struct

    千次阅读 2018-08-17 20:35:51
    matlab里面,struct结构体数组功能强大,在处理很多复杂数据上很有用,刚好最近需要用到,顺便学习总结一下。 1,什么是结构体? 简单的说,结构体是一个可包含不同数据类型的结构。可以在一个结构体中声明不同...
  • 输入, a : 一个 Matlab 结构体,例如 a(1).name='red', a(2).name='blue'; field : 搜索字段的名称,例如 'name' value : 搜索值,例如 'blue' 输出, index : 与搜索匹配的结构索引 例子, a(1).name='\u84dd\u...
  • MATLAB中专门用于对结构...表4.3.1 结构数组的操作函数函数名功能描述函数名功能描述deal把输入处理成输出fieldnames获取结构的字段名getfield获取结构中指定字段的值rmfield删除结构的字段(不是字段内容)setfiel...
  • 这可能发生,因为内置的subsasgn调用结构可能只是比较源和目标结构的fieldnames(这取决于字段顺序)的输出,并且在比较之前不会执行任何排序(可能是因为为每个分配排序两个单元阵列的性能命中).如果存在差异(如您所显示...
  • Matlab将结构体struct字段内的数据转化到矩阵中

    万次阅读 多人点赞 2018-10-24 17:57:40
    假设structure1,为一结构体,structure1.name为100个字符串 怎么将这些字符串不用循环一次性赋值到矩阵A?? A=structure1.name 为什么只是将第一个赋值过去? 答案是可以使用cat函数: ...
  • STRUCT2CSV(s,fn) 将矩阵和元胞数组的结构输出到以字段名称作为列标题的逗号分隔文件。 一种导出数据结构的简单方法。 s :由一个或多个矩阵和/或元胞数组组成的任何结构fn : 文件名 由 James Slegers 撰写,james...
  • 问题: 如何获取一个未知的struct的所有field 函数:fieldnames test.a=1 test.b=2 fieldnames(test) 输出 ans = 2×1 cell array 'a' 'b'
  • GENVARNAME 用于从以下位置生成有效的 MATLAB 结构体字段名称第一行数据。 空白条目作为“NaN”返回。 平台支持取决于 XLSREAD。 % 示例:鉴于此 Excel 文件内容(9 列,5 行): %一二三四''六七%1
  • 使用matlab显示.mat文件的图像(ground truth) 将数组或者矩阵保存为一个mat格式的文件,进行load命令读取a=load('gth.mat'); 当进行imshow(a,[]);显示图像时发生报错: Error using ...
  • 输出: %s(结构数组):一个包含所有变量的结构% 调用工作区。 如果指定了重新输入, % 只返回匹配 re 的变量。 % 例子 : % >> allmyvariables = ws2struct % 所有我的变量 = % a: {4x1 单元格} % ans: [1x1 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 4,731
精华内容 1,892
关键字:

matlab输出struct

matlab 订阅