Matlab:临时变量使用PARFOR之外的值集

时间:2014-07-30 14:44:43

标签: matlab parfor

我有一个基本结构如下的代码。因为有很多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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

你肯定有2个问题在这里被Matlab抱怨了。

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

    如果你一步一步地做,这不会受到伤害。考虑一盒20个编号的球。您有一个数字列表randperm(20)

    在每次迭代中,您查找列表中的数字,找到带有该数字的球,然后将其从框中删除,最后记录框中剩下的内容。这很容易。

    但是现在认为你有3名工作人员会为你完成这项工作。他们彼此独立,在不同的地方工作,随机变化(例如取决于天气和他们的心情),速度。每当他们从列表中询问您的号码时,请按照上面的方框进行操作,然后告诉您内部的内容。重复同样的游戏3次。他们的结果是相同的,因为工人自己 - 但不是你的数据 - 有不确定性。

  2. boolvar在每个循环中都会更新,仅在为false时才会更新。

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

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

  3. 关键是你不能在并行过程中读取或写入相同的变量,因为你无法预测没有不确定性的结果。见getting started with parfor

    parfor中使用的变量应归类为"循环","切片","广播","缩减&# 34;和"临时"。有关详细信息,请参阅advanced topic。你得到的错误说Matlab将tboolvar识别为临时变量,因为你在循环中为它赋值;但循环也依赖于parfor循环之外的值。