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 个问题
当我尝试使用 parfor
:
并行执行它时
parfor iii=1:5
[z,p]=F1(Community,NeighMat)
end
此错误发生在行中:Index exceeds matrix dimensions
而在正常情况下(不是并行)没有问题
- 非常耗时,拖慢速度
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
我用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)))
、
当我尝试使用
并行执行它时parfor
:parfor iii=1:5 [z,p]=F1(Community,NeighMat) end
此错误发生在行中:
Index exceeds matrix dimensions
而在正常情况下(不是并行)没有问题- 非常耗时,拖慢速度
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