我试图在MATLAB中初始化一个类似于C代码的结构
typedef struct{
float x;
float y;
} Data
Data datapts[100];
从matlab,我知道这是如何创建一个结构:
Data = structure('x',0,'y',0)
但是你如何创建它的100个实例呢?
或者这通常不是在MATLAB中完成的?只要有新数据要添加,MATLAB是否更喜欢动态分配?
感谢您的帮助......
答案 0 :(得分:10)
我不知道C,所以我不知道你的代码如何初始化结构。但是,请考虑以下两种可能性:
data
,每个元素都有两个字段x
和y
您可以使用
初始化空结构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
,就像使用矩阵一样。
data
和x
的结构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
。