我正在尝试用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
答案 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