"переменная в parfor не может быть классифицирована". ошибка в Matlab
Я пытаюсь реализовать очень простую программу с 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 ответа
Поскольку log_likelihood_II_with_entropy
опирается как на parfor
индекс (u
) и "внутренний индекс" (current_iter
) это не может быть классифицировано. каждый parfor
итерация не зависит от других, и они не выполняются по порядку (то есть u
не обязательно будет идти от 1 до users
в порядке 1,2,3,4,...,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
значение И тогда он заменит / объединит такое значение в 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