我正在努力使用简单的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”,然后从循环内部从那里提取最短路径距离,但是路径本身将不可用。
我已经阅读了有关此错误的一些相关问题,但我不完全知道这些问题与我的传记对象数据结构之间的关系。很抱歉,如果这是一个重复的问题,但是我对并行计算工具箱并不热衷,我对如何处理此错误感到不知所措。也许有人可以指出我正确的方向。
我正在使用MatlabR2017b。 预先感谢您抽出宝贵的时间给我一些建议。
此致
Gabriel