在Matlab中存储大结构

时间:2016-05-18 13:51:30

标签: arrays matlab memory structure

我使用fitglm在matlab中拟合统计模型,返回结构mdl。我想在一个单元格数组中存储许多这样的结构,以便以后重用它们,但这似乎不起作用。这是代码:

models = cell(size(quarterList,1)-lag-1,1);

for i=1:size(quarterList,1)-lag-1
    %indicesTemp = find(and(annQuarters(:,2) <= quarterList(i+11,2),annQuarters(:,2) >= quarterList(i,2)));
    memberTemp = ismember(annQuarters(:,:), quarterList(i:i+lag,:));
    indicesTemp = find(memberTemp(:,2));
    fprintf('Perdiod: Q%i %i to Q%i %i - Nb samples: %i \n',annQuarters(i,1),annQuarters(i,2),annQuarters(i+lag,1),annQuarters(i+lag,2),size(indicesTemp,1));

    [Xtemp Ytemp] = categorizeVariables(X(indicesTemp,:),Y(indicesTemp,:));

    mdl = fitglm(Xtemp,Ytemp-1,'Distribution','binomial', 'Link','logit');

    models(i,1) = mdl;     
end

现在,当我尝试将这样的结构分配给单个单元格时,它可以工作:

temp = cell(1,1);
mdl = fitglm(Xtemp,Ytemp-1,'Distribution','binomial', 'Link','logit');
temp = mdl;

为什么单元格数组中的赋值在这种情况下不起作用?关于如何解决这个问题的任何建议?

1 个答案:

答案 0 :(得分:0)

这不起作用,因为使用models(index)赋值(使用())假设右侧的内容是一个单元格。你想要使用大括号,它会将右边(任何类型)的项目复制到指定元素的单元格数组中。

models{i,1} = mdl;

如果你真的想使用(),你可以先将右边的东西转换为单元格。

models(i,1) = {mdl};

你的第二个例子(带有标量单元格数组)没有导致错误的原因是因为你fitglm的输出放入单元格数组,而是覆盖变量temp以指向mdl而不是单元格数组。

temp = cell(1,1);

% Check if temp is a cell
iscell(temp)
%// TRUE

mdl = fitglm(Xtemp,Ytemp-1,'Distribution','binomial','Link','logit');

temp = mdl;

% Check if temp is still a cell (it isn't)
iscell(temp)
%// FALSE

除此之外,您实际上可以将struct存储在数组中。除非字段不同,否则您实际上并不需要单元格数组。

for i = 1:N
    mdl(i) = fitglm(Xtemp, Ytemp - 1, 'Distribution', 'binomial', 'Link', 'logit'); 
end