я написал функцию в 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
Но у меня 2 проблемы со строкой Com(j,2)=sum(FlattedAdjMat((Community),Com(j,1)))
,
когда я пытаюсь выполнить его параллельно, используя
parfor
:parfor iii=1:5 [z,p]=F1(Community,NeighMat) end
эта ошибка возникает в строке:
Index exceeds matrix dimensions
в то время как в обычном случае (не Parallel) проблем нет- это отнимает много времени и замедляет скорость.
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)
for j=1:numel(Com(:,1))
наparfor j=1:numel(Com(:,1))
- person Sardar Usama   schedule 25.11.2017F1
параллельно. не просто цикл в этой функции. - person Reza Sh   schedule 25.11.2017