我试图在MATLAB中初始化一个类似于C代码的结构
typedef struct{ float x; float y; } Data Data datapts[100];
从matlab中,我知道如何创建一个结构:
Data = structure('x',0,'y',0)
但你如何创建100个示例呢或者这通常不是在MATLAB中完成的?无论何时有新数据要添加,MATLAB都更喜欢动态分配吗?谢谢你的帮助。
zte4gxcn1#
我不懂C,所以我不知道你的代码是如何初始化结构的。但是,考虑以下两种可能性:
data
x
y
初始化空结构
data = struct('x', cell(100,1), 'y', cell(100,1));
你可以用data(1)访问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'
所以你可以访问每个单独的结构体来获取它的属性。现在,如果你想将一个结构体数组与接下来的10个元素追加到这个列表中,你可以使用cat,就像你对矩阵所做的那样。
cat
您可以将其初始化为
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]);
一旦你理解了结构体和结构体数组,以及它们是如何使用和索引的,你就可以用比上面简单的例子更复杂的方式来使用它们。
yvgpqqbh2#
repmat(Data,100,1);
您可以使用以下命令将数据分配给它:
Data(1).x = 10; Data(1).y = 20;
kpbwa7wx3#
除了@yoda和@Jacob描述的其他方法之外,您还可以使用cell2struct。
cell2struct
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。
dataPoint = Data
4条答案
按热度按时间zte4gxcn1#
我不懂C,所以我不知道你的代码是如何初始化结构的。但是,考虑以下两种可能性:
1.结构体 array
data
,100个元素,每个元素有两个字段x
和y
初始化空结构
你可以用
data(1)
访问struct数组的每个元素,每个元素都是一个结构体。通常,当你有几个等价的“东西”,它们具有相同的属性集,但每个属性值不同时,就使用这些。示例:
所以你可以访问每个单独的结构体来获取它的属性。现在,如果你想将一个结构体数组与接下来的10个元素追加到这个列表中,你可以使用
cat
,就像你对矩阵所做的那样。2.结构体
data
,包含两个字段x
和y
,每个字段100个元素您可以将其初始化为
当你有一个“东西”,它有几个可能包含不同值的属性时,通常会使用这个方法。
示例:
一旦你理解了结构体和结构体数组,以及它们是如何使用和索引的,你就可以用比上面简单的例子更复杂的方式来使用它们。
yvgpqqbh2#
您可以使用以下命令将数据分配给它:
kpbwa7wx3#
除了@yoda和@Jacob描述的其他方法之外,您还可以使用
cell2struct
。jfgube3f4#
如果你想创建一个在示例化之前只是蓝图的数据结构,那么你必须使用class。
这里有一个类可以完成这个任务。请参考文档了解文件结构的详细信息。
然后,通过调用
dataPoint = Data
示例化它,并根据需要使用repmat生成100。