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



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

错误:变量 log_likelihood_II_with_entropy 在帕尔福不能 机要。

我的代码写在下面:

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)和"内部索引"(current_iter),因此无法分类。每个parfor迭代都独立于其他迭代,并且它们不按顺序执行(也就是说,u不一定会按顺序从 1 到 users 顺序 1,2,3,4,..., 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值是多少。然后它将在log_likelihood_II_with_entropy矩阵中替换/连接该值。

Parfor 循环不喜欢你有 2 个变量,因为它可能会混淆。要么使用单元数组来存储,要么切换 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

相关内容

  • 没有找到相关文章

最新更新