【问题标题】:Saving values of variable in MATLAB在 MATLAB 中保存变量的值
【发布时间】:2016-09-07 00:45:24
【问题描述】:

您好,对于我的代码,我想知道如何最好地保存我的变量 columncolumn 是 733x1。理想情况下,我想拥有 column1(y)=column,但我得到错误:

无法从逻辑单元格转换为单元格。

在内部循环中。我发现很难访问overlap 中的这些存储值。

for i = 1:7 
    for y = 1:ydim % ydim = 436
        %execute code  %code produces different 'column' on each iteration 
        column1{y} = column; %'column' size 733x1 %altogether 436 sets of 'column'
    end
    overlap{i} = column1; %iterates 7 times. 
end

理想情况下,我希望 overlap 存储 7 个已保存的变量(733x436)。
谢谢。

【问题讨论】:

  • 重新表述您的问题,您要问的是,如何访问overlap中存储的值,这就是您要问的吗?
  • 您使用元胞数组而不是将列向量连接成二维数组有什么特别的原因吗?看起来它们的大小都一样。
  • 在 MATLAB 中有许多从单元格到矩阵的转换。由于我们不知道column_fill 的大小或它与column1 的关系,所以很难说。但也许这不是问题?我只是假设这是因为您提供了一条错误消息。
  • 感谢您在我的帖子中指出这个错误。现已更新。

标签: matlab loops variables


【解决方案1】:

我假设column 是使用每列依赖于后者的过程计算的。如果没有,那么很可能可以对此进行改进:

column = zeros(733, 1);           % Might not need this. Depends on you code.
all_columns = zeros(xdim, ydim);  % Pre-allocate memory (always do this)
                                  % Note that the first dimension is usually called x,
                                  % and the second called y in MATLAB
overlap = cell(7, 1);
overlap(:) = {zeros(xdim, ydim)}; % Pre-allocate memory

for ii = 1:numel(overlap)         % numel is better than length
    for jj = 1:ydim               % ii and jj are better than i and j
        % several_lines_of_code_to_calculate_column
        column = something;
        all_columns(:, jj) = column;
    end
    overlap{ii} = all_columns;
end

您可以像这样访问overlap 中的变量:overlap{1}(1,1);。这将获得第一个单元格中的第一个元素。 overlap{2} 将在第二个单元格中获取整个矩阵。

您指定需要 7 个变量。您的代码意味着您知道单元格比将其分配给不同的变量更好(var1var2 ...)。好的!不同变量的解决方案很糟糕。

您可以使用 3D 数组代替元胞数组。例如,如果您可以对内容进行矢量化,这可能会使稍后的处理速度更快。

这将是:

column = zeros(733, 1);        % Might not need this. Depends on you code.
overlap = zeros(xdim, ydim, 7) % Pre-allocate memory for 3D-matrix

for ii = 1:7
   for jj = 1:ydim
      % several_lines_of_code_to_calculate_column
      column = something;
      all_column(:, jj, ii) = column;
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-13
    • 2022-10-14
    • 1970-01-01
    • 2013-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多