-1

我有一个代码,其基本结构如下。因为有很多 for 循环迭代,所以我想将 for 循环转换为 parfor 循环。不幸的是,我收到一个错误: The repmorary variable 'DeclaredVar' uses a value set outside the PARFOR. 有什么技术可以克服这些问题吗?

t = ee; % save my data in t. t is a Nx1 vector
boolvar = 0;
parfor x=1:length(xs) % xs is a Mx1 vector (N>>M).

    xx = xs(x);
    t = t(t>=xx); %% the temporary variable 't' uses a value set outside the PARFOR loop 
    if boolvar==0 %% the temporary variable 'boolvar' uses a value set outside the PARFOR loop 
        try
            % Part 1 code 
        catch
            boolvar = 1;
        end;
    end;
    if boolvar==1
        % execute Part 2 code if boolvar is true
    end;
    M(x,:) = % save data. M is a length(xs) x 2 matrix 
end

谢谢!

4

1 回答 1

1

我试图弄清楚你的代码是做什么的。如果我错了,请纠正我 - 所以你想通过一个向量xs。每次从 中选择一个值xx时,您通过仅选择那些 来xs过滤数据,并更新t。然后,如果降旗,做点什么,升旗;如果旗帜已经升起,请执行其他操作。tt>xx

您在这里肯定有 2 个 Matlab 抱怨过的问题。

  1. t在每个循环中更新,取决于它自己的值。

    如果你一步一步做,这不会有什么坏处。考虑一盒 20 个编号的球。你有一个数字列表说randperm(20)

    在每次迭代中,查找列表中的数字,找到具有该数字的球,然后将其从盒子中取出,最后记录盒子中剩下的东西。这很简单。

    但现在考虑您有 3 名工人将为您完成这项工作。它们彼此独立并且以不同且随机变化(例如,取决于天气和他们的心情)的速度工作。每次他们从列表中向您询问一个数字时,然后对框执行上述操作,并告诉您里面还剩下什么。重复相同的游戏 3 次。他们的结果将一样,因为工人本身——而不是你的数据——有不确定性。

  2. boolvar在每个循环中更新,仅当它为假时。

    再一次,对工人来说,没什么奇怪的,他们只是听从你的指示。

    但对你(和 Matlab)来说,最终结果将取决于天气。这至少是 Matlab 的设计师所不允许的,他们一定不喜欢不确定性。

关键是您不能在并行过程中读取或写入相同的变量,因为您无法在没有不确定性的情况下预测结果。请参阅入门parfor

中使用的变量parfor应归类为“循环”、“切片”、“广播”、“减少”和“临时”之一。有关详细信息,请参阅高级主题。你得到的错误说Matlab识别tboolvar作为临时变量,因为你在循环中为它分配了值;但循环也依赖于parfor循环外的值。

于 2014-07-31T00:08:52.860 回答