所以我试图使用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中的并行循环,"概述"。
我无法在任何地方找到解决方案,我不知道问题所在。发生了什么事?
答案 0 :(得分:1)
您正在尝试填充数组,然后才知道要填充的元素数量。这意味着您的循环具有不同的current_coef
长度,在循环运行之前无法确定。您需要在并行循环执行之前定义所有内容,因为执行顺序不是预先确定的。
@AndrasDeak在这篇文章的评论中给出了解决这个问题的方法。 (我不知道该函数,或者它总是输出相同数量的元素,因此我只能解释为什么这段代码不起作用,而不是解决方案)
一般来说,最好首先在速度方面优化代码,然后尝试并行。即使没有回归。并行处理并不是一种神奇的想法,你想要浪费在草率的代码上来神奇地使它更快地执行,它是一个高度优化的工具,最适合优化的代码。
要更好地了解parfor
,请参阅Saving time and memory using parfor in Matlab?
注意你把这段代码称为"回归"在你今天早些时候的一篇文章中,事实并非如此。但是,如果它是回归,parfor
将不起作用。
答案 1 :(得分:1)