结构MATLAB

时间:2015-12-11 23:51:20

标签: arrays matlab cell

我正在尝试使用单元格数组的单元格数组,以便将数据存储在结构中。

以下是我的例子:

close all;
clear all;
clc;

register = struct('thing', [], ...
                  'positions', cell(1));

register.positions{1}{end+1} = {[45 36]};
register.positions{2}{end+1} = {[12 87]};

register

我收到以下错误消息:

  

来自非单元格数组对象的单元格内容引用。

     

测试错误(第8行)register.positions {1} {end + 1} = {[45 36]};

我肯定做错了什么,但我还没有尝试过很多其他事情。

感谢您的帮助

1 个答案:

答案 0 :(得分:1)

必须首先初始化单元格。让我们分解一下:你的代码

register = struct('thing', [], 'positions', cell(1));

实际上创建了一个包含两个空字段的结构:

>> register

register = 

    thing: []
positions: []

使用end直接分配(例如使用register.positions{1}{end+1}=4)将会失败,因为第二级中的end会尝试确定register.positions{1}处单元格的大小,但是register.positions本身就是空的!

那么,我们该怎么办?我们可以确保在第一次将顶级新元素引用时,我们会初始化它而不引用其内容。例如,register.positions{1} = []将完成工作,

register.positions{1}{end+1} = [45 36];

然后会工作。 (注意:这里我没有将数组封装在另一组花括号中,因为根据你上面的评论,它们似乎并不是必需的。)

现在,为了使这更方便一点,你预分配 positions字段中的元素数量('汽车'在你的评论中),如果它是已知的(或大于预期的数字):

register = struct('thing', [], 'positions', {cell(1, 42)})