i eine Funktion in MATLAB geschrieben haben, die eine Kostenfunktion für ein Array zu berechnen, ist:Fehler mit 'parfor' in 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
aber ich habe 2 Problem mit der Linie Com(j,2)=sum(FlattedAdjMat((Community),Com(j,1)))
,
wenn ich versuche es parallel auszuführen urs in der Zeile:
Index exceeds matrix dimensions
während im Normalfall (nicht parallel) gibt es kein Problem- es ist sehr zeitaufwendig und verlangsamen die Geschwindigkeit.
parfor iii=1:5
[z,p]=F1(Community,NeighMat)
end
dieser Fehler occ: mit parfor
NeighMat
ist eine gewichtete Adjazenzmatrix, Community
ein Array der Matrix-Indizes ist, FlattedAdjMat
ist Adjazenzmatrix.
Würdest du mir bitte helfen?
Beispieldaten:
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, sollten Sie geändert haben 'für j = 1: numel (Com (:, 1))' zu 'parfor j = 1: numel (Com (:, 1))' –
@SardarUsama, ich möchte die Funktion 'F1' parallel ausführen. nicht nur eine Schleife in dieser Funktion. –
Was ist der Zweck, es fünf Mal auszuführen, wenn Sie die Eingabeargumente für alle Iterationen unverändert lassen? –