【问题标题】:Store big structure in Matlab在 Matlab 中存储大结构
【发布时间】:2016-05-18 13:51:29
【问题描述】:

我正在使用 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;

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

【问题讨论】:

    标签: arrays matlab memory structure


    【解决方案1】:

    这不起作用,因为使用models(index) 赋值(带有())假定右侧的东西是一个单元格。相反,您希望使用大括号将右侧的项目(任何类型)复制到指定元素的元胞数组中。

    models{i,1} = mdl;
    

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

    models(i,1) = {mdl};
    

    您的第二个示例(带有标量元胞数组)没有导致错误的原因是因为您没有fitglm 的输出放入元胞数组中,而是 em>覆盖变量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
    

    除此之外,您实际上可以将structs 存储在自己的数组中。除非字段不同,否则您实际上并不需要元胞数组。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多