"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
我正在尝试使用 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