【发布时间】:2023-04-06 07:19:01
【问题描述】:
我在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)
【问题讨论】:
-
IIUC,你应该把
for j=1:numel(Com(:,1))改成parfor j=1:numel(Com(:,1)) -
@SardarUsama,我想并行执行函数
F1。不仅仅是该函数中的一个循环。 -
如果您在所有迭代中保持输入参数相同,那么运行五次的目的是什么?
-
这只是我论文的一个功能,对于不同的社区我需要并行运行,所以每个线程的输入是不同的。线程独立运行。
-
这不是重复的问题,我已经检查过了
标签: matlab matrix parallel-processing parfor