如何在matlab中预分配结构

时间:2012-08-09 19:57:25

标签: arrays matlab structure

我确实有一个简单的问题,但它不适合我。 我想预先分配包含许多字段的结构。我想这样得到它:  结构S 1x30和30个字段中的每一个应该是1x50的结构(50个条目整数中的一些,一些具有字符串的单元格,一些子阵列)。这是否可以预先分配它而不给出50个字段中每个字段的确切名称?

喝彩!

1 个答案:

答案 0 :(得分:2)

必须命名AFAIK结构字段,但这些名称不需要硬编码。

例如,如果我的结构foo有一个名为bar的字段,我可以像这样访问该字段:

name = 'bar';
data = foo.(name);  % the same as data = getfield(data, name);

foo.(name)符号表示可以从可以找到文档的变量(动态字段名称)中创建字段名称here。 此外,您可以使用它来创建字段。

name = 'bar'
for i = 1:10
  nameI = [bar, num2str(i)] ;
  foo.( nameI) = []; % the same as foo = setfield(foo, nameI, []);
end

结构foo现在有10个名为bar1bar2,... bar10的字段。

如果你绝对不想要名字而只是想要标记那么你可能想要的是一个单元格数组。细胞阵列就像常规的matlab载体一样,只不过它们可以包含任何东西。

c = {'1234', 1234, [1 2 3 4],  [1 2; 3 4], @disp, {1 ,2, 3}};

例如c是一个包含字符串,标量,向量,矩阵然后是函数句柄和另一个单元格数组的单元格数组。

您可以使用大括号{}访问单个单元格的内容。所以 c{1}将返回'1234',而c{2}会返回一个数字。

您可以使用这些方法中的任何一种来预先分配适合您所描述的数据结构。