matlab 中 'parfor' 错误

error with 'parfor' in matlab

我用matlab写了一个函数,就是计算一个数组的代价函数:

  function [F1val, Com]=F1(Community,NeighMat)  
        global FlattedAdjMat;
        Com=zeros(numel(Community),3);
        Com(:,1)=Community';  % The First row of Com= Community's Nodes  
        % Calculating INTERNAL Edges of Community  
            for j=1:numel(Com(:,1))
                Com(j,2)=sum(FlattedAdjMat((Community),Com(j,1)));% Internal Degrees of Node j            
            end
        F1val=(nansum(Com(:,3)./((Com(:,2)+Com(:,3)))));
  end

但是 Com(j,2)=sum(FlattedAdjMat((Community),Com(j,1)))

这行我有 2 个问题
  1. 当我尝试使用 parfor:

    并行执行它时
    parfor iii=1:5
        [z,p]=F1(Community,NeighMat)
    end
    

    此错误发生在行中:Index exceeds matrix dimensions 而在正常情况下(不是并行)没有问题

  2. 非常耗时,拖慢速度

NeighMat是加权邻接矩阵, Community 是矩阵索引的数组, FlattedAdjMat 是邻接矩阵。

你能帮帮我吗?

示例数据:

for ii=1:10
   NeighMat{ii}=randi(10,1,10)
end

Community=[1,5,6,8,9];`

global FlattedAdjMat
FlattedAdjMat=randi([0,1],10,10)

您的全局变量有问题。这个问题讨论得很好here

我稍微重写了你的代码,它对我来说很完美(Matlab 2017b Win64)

close all
clear all
clc
%% SAMPLE DATA
for ii=1:10
    NeighMat{ii}=randi(10,1,10);
end
Community=[1,5,6,8,9];
FlattedAdjMat=randi([0,1],10,10);
%% BODY
parfor iii=1:5
    [z,p]=F1(Community,NeighMat,FlattedAdjMat)
end

%% FUNCTION
function [F1val, Com]=F1(Community,NeighMat,FlattedAdjMat)
    Com=zeros(numel(Community),3);
    Com(:,1)=Community';  % The First row of Com= Community's Nodes
    % Calculating INTERNAL Edges of Community
    for j=1:numel(Com(:,1))
        Com(j,2)=sum(FlattedAdjMat((Community),Com(j,1)));% Internal Degrees of Node j
    end
    F1val=(nansum(Com(:,3)./((Com(:,2)+Com(:,3)))));
end