Я борюсь с простым Matlab Parfor. Я использую объект biograph , представляющий интересный график. Поскольку мне приходится вычислять много кратчайших путей, а количество узлов велико, я подумал, что было бы неплохо использовать parfor для ускорения вычислений.
Код такой простой. Для примера предположим, что мы хотим вычислить кратчайший путь от узлов 1, 2 и 3 к узлу 2.
cm = [0 1 1 0 0;1 0 0 1 1;1 0 0 0 0;0 0 0 0 1;1 0 1 0 0];
ids = {'M30931','L07625','K03454','M27323','M15390'};
bg = biograph(cm,ids);
workers = 3;
parpool('local', workers)
parfor i=1:3
[dist, pth, ~] = bg.shortestpath(i, 2);
end
Возникает следующая ошибка:
Структурная ссылка на содержимое из неструктурного объекта массива.
Я уже пытался назвать "bg.shortestpath (i, 2);" как функция, но это не сработало. Возможно, это связано с тем, что объекты биографических данных обрабатываются Matlab как указатели, что означает, что если вы выполните,
bg2 = bg
, а затем вы изменяете любой из параметров bg2, изменения также отражаются в bg.
Мне известно, что я мог бы вычислить "bg.allshortestpaths" вне цикла и затем извлечь кратчайшее расстояние пути оттуда внутри цикла, но тогда сам путь оставался бы недоступным.
Я прочитал несколько связанных вопросов об этой ошибке, но я точно не знаю, как они связаны с моей структурой данных объекта биографии. Я извиняюсь, если это дублирующий вопрос, но я не заинтересован в Parallel Computing Toolbox, и я чувствую себя очень ошеломленным, как подойти к этой ошибке. Может быть, кто-то может указать мне правильное направление.
Я использую MatlabR2017b.
Заранее благодарим за то, что уделили мне время.
С уважением,
Gabriel