При использовании parfor
в MATLAB с использованием массивов ячеек я столкнулся с проблемой, когда я не вижу никакой разницы между кодом рабочего примера и моей ошибочной строкой!
Модификация данных может выполняться независимо для каждого работника, и я хотел использовать нарезку переменных, как показано в Блог MathWorks
A3 = cell(10,1);
parfor ix = 1:10
for jx = 1:10
A3{ix}(jx) = ix + jx;
end
end
A3 = cell2mat(A3);
Я делаю точно такое же индексирование первого уровня, как в примере, но MATLAB не может его классифицировать.
Я хочу, чтобы были удалены определенные строки: Есть файл Файлы с каждой строкой Строки, которые сравниваются с некоторыми значениями в (для простоты не показаны) других циклах. Для каждого файла будет назначен рабочий.
parfor file=1:length(data(:,1))
line= 1;
length_line = length(data{file,1}(:,1));
while line <= length_line && ... && ...
% some more loops
if (...)
data{file,1}(line,:) = [];
length_line= length_line - 1;
end
% end of some more loops
line= line + 1;
end
end
% data will be returned
Я не понимаю, почему это не должно работать! Что я принял во внимание:
data
будут изменены таким образом, чтобы каждая модификация рабочих процессов не влияла на другие (удаленные строки являются лишь подмножеством фактических данных рабочих процессов)- для нарезки индексация должна выполняться на первом уровне (
data{file,1}
) - другие переменные индексации первого уровня будут рассматриваться как константы / являются константами, я использую «1», так что все хорошо.
- Нет назначения переменных в цикле, которые позже будут использоваться снаружи (даже не константы)
- Тестирование без строки
data{file,1}(line,:)= []
выполняется без предупреждений Matlab. - Пробовал статический анализатор кода MATLAB
output = mlint('myFile.m')
, но он не дает мне никаких полезных советов.
Только эта единственная линия разрушает все. Но мне действительно нужно, чтобы эта команда работала. Любые подсказки/обходные пути?