在Matlab中初始化结构

bxgwgixi  于 2023-04-06  发布在  Matlab
关注(0)|答案(4)|浏览(268)

我试图在MATLAB中初始化一个类似于C代码的结构

typedef struct{
 float x;
 float y;
} Data

Data datapts[100];

从matlab中,我知道如何创建一个结构:

Data = structure('x',0,'y',0)

但你如何创建100个示例呢
或者这通常不是在MATLAB中完成的?无论何时有新数据要添加,MATLAB都更喜欢动态分配吗?
谢谢你的帮助。

zte4gxcn

zte4gxcn1#

我不懂C,所以我不知道你的代码是如何初始化结构的。但是,考虑以下两种可能性:

1.结构体 arraydata,100个元素,每个元素有两个字段xy

初始化空结构

data = struct('x', cell(100,1), 'y', cell(100,1));

你可以用data(1)访问struct数组的每个元素,每个元素都是一个结构体。通常,当你有几个等价的“东西”,它们具有相同的属性集,但每个属性值不同时,就使用这些。

示例:

elements = struct(...
    'name',         {'Hydrogen', 'Helium', 'Lithium'},...
    'atomicWeight', {1, 4, 7}, ...
    'symbol',       {'H', 'He', 'Li'});

elements(1)
ans = 

        name: 'Hydrogen'
atomicWeight: 1
      symbol: 'H'

所以你可以访问每个单独的结构体来获取它的属性。现在,如果你想将一个结构体数组与接下来的10个元素追加到这个列表中,你可以使用cat,就像你对矩阵所做的那样。

2.结构体data,包含两个字段xy,每个字段100个元素

您可以将其初始化为

data = struct('x',zeros(100,1),'y',zeros(100,1));

当你有一个“东西”,它有几个可能包含不同值的属性时,通常会使用这个方法。

示例:

weather=struct('time',{{'6:00','12:00','18:00','24:00'}},...
    'temperature',[23,28,25,21]);

一旦你理解了结构体和结构体数组,以及它们是如何使用和索引的,你就可以用比上面简单的例子更复杂的方式来使用它们。

yvgpqqbh

yvgpqqbh2#

repmat(Data,100,1);

您可以使用以下命令将数据分配给它:

Data(1).x = 10;
Data(1).y = 20;
kpbwa7wx

kpbwa7wx3#

除了@yoda和@Jacob描述的其他方法之外,您还可以使用cell2struct

jfgube3f

jfgube3f4#

如果你想创建一个在示例化之前只是蓝图的数据结构,那么你必须使用class
这里有一个类可以完成这个任务。请参考文档了解文件结构的详细信息。

classdef Data
  properties
    x = 0  % If you don't want to initialize upon instantiation,
    y = 0  % you could instead have x/y {mustBeNumeric}
  end
end

然后,通过调用dataPoint = Data示例化它,并根据需要使用repmat生成100。

相关问题