"the variable in a parfor cannot be classified." Matlab 中的错误

"the variable in a parfor cannot be classified." error in Matlab

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

Error: The variable log_likelihood_II_with_entropy in a parfor cannot be classified.

我的代码如下:

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

由于 log_likelihood_II_with_entropy 依赖于 parfor 索引 (u) 和 "inside index" (current_iter),因此无法对其进行分类。每个 parfor 迭代都独立于其他迭代并且它们不按顺序执行(也就是说,u 不一定按照 1,2,3,4 的顺序从 1 到 users, ...,users).

我的建议是让单个 parfor 迭代(worker)构建一整行 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 值是什么。然后它将replace/concatenate这样的值放在log_likelihood_II_with_entropy矩阵中。

当你有 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