Ошибка Matlab Parfor с биографическим объектом: ссылка на содержимое структуры из неструктурного объекта массива - PullRequest
0 голосов
/ 09 января 2019

Я борюсь с простым 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

...