" parfor中的变量无法分类。" Matlab中的错误

时间:2016-02-09 20:04:03

标签: matlab parallel-processing parfor matlabpool

我正在尝试用parfor实现一个非常简单的程序,但是我遇到了一些错误。我看到了几乎所有可能重复的SO问题,但是没有它们与我的问题情况类似。我得到的错误是:

  

错误:变量   log_likelihood_II_with_entropy   在parfor不能   分类

我的代码如下:

em_iterations=10;

users=5;
log_likelihood_II_with_entropy=zeros(users,em_iterations);

parfor u = 1:1:users
      for current_iter=1:1:em_iterations
           log_likelihood_II_with_entropy(u,current_iter)=rand();               
      end
end

2 个答案:

答案 0 :(得分:3)

由于Fragment依赖于log_likelihood_II_with_entropy索引(parfor)和"内部索引" (u)它不能被分类。每个current_iter次迭代都与其他迭代无关,并且它们不会按顺序执行(即,parfor不一定从1到u按1,2,3,4顺序执行, ...,users)。

我的建议是让单users次迭代(工人)构建整行parfor

log_likelihood_II_with_entropy

通过这种方式,无论parfor u=1:users single_row=zeros(1,em_iterations); for current_iter=1:1:em_iterations single_row(current_iter)=rand(); end log_likelihood_II_with_entropy(u,:)=single_row; end 值是什么,每个parfor任务(parfor正文本身)都会预先分配和评估单行。然后它将替换/连接u矩阵中的这个值。

答案 1 :(得分:1)

当你有2个变量时,Parfor循环不喜欢它,因为它有可能混淆。要么使用单元格数组来存储,要么切换for和parfor循环的顺序,如下所示。

em_iterations=10;

users=5;
log_likelihood_II_with_entropy=zeros(users,em_iterations);

for u = 1:1:users
      parfor current_iter=1:1:em_iterations
           log_likelihood_II_with_entropy(u,current_iter)=rand();               
      end
end