Существуют ограничения в том, как вы можете записывать в массивы внутри тела parfor loop
.В общем случае вам нужно будет использовать нарезанные массивы .
Причина этой проблемы заключается в том, что Matlab должен предотвратить доступ разных рабочих к одним и тем же данным, что приведет к непредсказуемым результатам (поскольку своевременный порядок, в котором parfor
циклически перебирает i
, не определяется).
Итак, хотя в вашем примере рабочие не работают с одинаковыми записями a
, из-за способа индексации a
(с массивом логики) это в настоящее время невозможночтобы Matlab мог решить, так ли это (или, другими словами, Matlab не может классифицировать a
).
Редактировать: Для полноты я добавляю некоторый код, эквивалентный вашему примеру, хотя я предполагаю, что ваша настоящая проблема связана с более сложной логической индексацией?
a = ones(4,4,4);
parfor i = 1:size(a,1)
a(i, :, :) = zeros(4, 4) + i; % this is sliced indexing
end
Редактировать: Поскольку пример OP был изменен, приведенный выше код больше не эквивалентен примеру.