"переменная в 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
Другие вопросы по тегам