在Matlab中初始化结构

时间:2011-12-13 23:56:48

标签: matlab struct

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

typedef struct{
 float x;
 float y;
} Data

Data datapts[100];

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

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

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

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

感谢您的帮助......

3 个答案:

答案 0 :(得分:10)

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

1。包含100个元素的struct 数组 data,每个元素都有两个字段xy

您可以使用

初始化空结构
data = struct('x', cell(100,1), 'y', cell(100,1));

并且您将结构数组的每个元素作为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'

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

2。包含两个字段datax的结构y,每个字段包含100个元素

您可以将其初始化为

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

您可以访问该字段的每个元素data.x(1)。当你有一个“东西”,其中有几个属性可能包含不同的值时,通常会使用此方法。

实施例

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

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

答案 1 :(得分:5)

repmat(Data,100,1);

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

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

答案 2 :(得分:1)

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