在Matlab中初始化结构

O_O*_*O_O 2 matlab struct

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

typedef struct{
 float x;
 float y;
} Data

Data datapts[100];
Run Code Online (Sandbox Code Playgroud)

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

Data = structure('x',0,'y',0)
Run Code Online (Sandbox Code Playgroud)

但是你如何创建它的100个实例呢?

或者这通常不是在MATLAB中完成的?每当有新数据需要添加时,MATLAB是否更喜欢动态分配?

感谢你的帮助..

abc*_*bcd 11

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

1.一个包含100个元素的结构数组 data,每个元素都有两个字段xy

您可以使用初始化空结构

data = struct('x', cell(100,1), 'y', cell(100,1));
Run Code Online (Sandbox Code Playgroud)

并且您访问struct数组的每个元素,并且每个元素data(1)都是一个结构.通常,如果您有多个具有相同属性集的等效"事物",但每个属性具有不同的值,则会使用这些属性.

例:

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

elements(1)
ans = 

        name: 'Hydrogen'
atomicWeight: 1
      symbol: 'H'
Run Code Online (Sandbox Code Playgroud)

因此,您可以访问每个单独的结构以获取其属性.现在,如果您想将带有接下来的10个元素的结构数组附加到此列表中,您可以cat像使用矩阵一样使用它.

2.一种结构data具有两个字段xy,每个具有100种元素

您可以将其初始化为

data = struct('x',zeros(100,1),'y',zeros(100,1));
Run Code Online (Sandbox Code Playgroud)

并且您可以访问该字段的每个元素data.x(1).当您有一个具有多个可能包含不同值的属性的"东西"时,通常会使用此方法.

例:

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

一旦理解了结构和结构数组以及它们如何被使用和编入索引,就可以使用比上面简单插图更复杂的方式使用它们.


Jac*_*cob 5

repmat(Data,100,1);
Run Code Online (Sandbox Code Playgroud)

您可以使用以下方式为其分配数据:

Data(1).x = 10;
Data(1).y = 20;
Run Code Online (Sandbox Code Playgroud)

  • 您不需要 `Data = repmat(Data,100,1)` 将“答案”分配给新结构吗? (2认同)