误差与在Matlab“PARFOR”
我已经写在Matlab一个函数,这是计算的成本函数的数组:误差与在Matlab“PARFOR”
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
但是我有2个问题与线Com(j,2)=sum(FlattedAdjMat((Community),Com(j,1)))
,
-
当我尝试并行执行它使用
parfor
:parfor iii=1:5 [z,p]=F1(Community,NeighMat) end
此错误OCC Urs在线:
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
它不是重复的。在另一个SO帖子中讨论了如何在parfor中处理全局变量的问题。在这里,这个人没有想法为什么代码不起作用。答案是不要使用全局变量,或者如果你需要它,请看链接。 – zlon
谢谢。你是对的。 –
IIUC,你应该已经改变了'对于j = 1:numel(COM(:,1))'到'parfor j = 1:numel(Com(:,1))' –
@SardarUsama,我想并行执行函数'F1'。不只是该函数的一个循环。 –
运行五次的目的是什么?如果你保持所有迭代的输入参数相同? –