parfor with Matlab" parfor中的变量__不能被分类"

时间:2015-10-27 11:42:26

标签: matlab parallel-processing parfor

所以我试图使用parfor调用此函数(基本上使用傅里叶级数通过parfor循环中的向量进行曲线拟合):

function[coefnames,coef] = fourier_regression(vect_waves,n)

    coef = zeros(length(vect_waves)-n,18);
    current_coef = zeros(18,1); % All the terms of the fourier series
    x = 1:n;

    parpool_obj = parpool;
    parfor i=n:length(vect_waves)

        take_fourier = vect_waves(i-n+1:i);

        f = fit(x,take_fourier,'fourier8');
        current_coef = coeffvalues(f);
        coef(i,1:length(current_coef)) = current_coef;

    end
    coefnames = coeffnames(f);

    delete(parpool_obj);
end

但我刚收到错误

  

" parfor中的变量coef无法分类。   请参阅MATLAB中的并行循环,"概述"。

我无法在任何地方找到解决方案,我不知道问题所在。发生了什么事?

2 个答案:

答案 0 :(得分:1)

您正在尝试填充数组,然后才知道要填充的元素数量。这意味着您的循环具有不同的current_coef长度,在循环运行之前无法确定。您需要在并行循环执行之前定义所有内容,因为执行顺序不是预先确定的。

@AndrasDeak在这篇文章的评论中给出了解决这个问题的方法。 (我不知道该函数,或者它总是输出相同数量的元素,因此我只能解释为什么这段代码不起作用,而不是解决方案)

一般来说,最好首先在速度方面优化代码,然后尝试并行。即使没有回归。并行处理并不是一种神奇的想法,你想要浪费在草率的代码上来神奇地使它更快地执行,它是一个高度优化的工具,最适合优化的代码。

要更好地了解parfor,请参阅Saving time and memory using parfor in Matlab?

注意你把这段代码称为"回归"在你今天早些时候的一篇文章中,事实并非如此。但是,如果它是回归,parfor将不起作用。

答案 1 :(得分:1)