在使用matlab做课题的时候,需要运行几千节点的大型对称邻接矩阵,写的代码运行时间太久了,试了parfor并行计算,开了6个works跑程序,尽力优化了代码细节,但速度还是提不上来,求程序还有哪些优化空间(如矢量化或者mex等等优化操作)。
matlab的代码如下:
function [seeds] = New_OWN_parallel(net,k,seedsize)
% 筛选节点获得重要节点
[kcore_mat,oldtag]=K_core_with_tag(net,2);
net1=full(net);
A=net^k;
[row,vol]=size(net);
seeds=[];
for i=1:seedsize
s=-inf*ones(row,1);%放入种子集的节点的贡献值
net=net1;
net(seeds,:)=0;
net(:,seeds)=0;
temp=[];
parfor u=1:length(oldtag)
j=oldtag(u);
if ismember(j,seeds)
continue;
end
R=zeros(row);
R(j,:)=net(j,:);
R(:,j)=net(:,j);
if k==1
B=R;
else
B=A-(net-R)^k;
end
theta=sum(sum(B));
temp=[temp;theta];
end
s(oldtag,1)=temp;
i_m=find(max(s)==s);
index=i_m(1);
seeds=[seeds;index];
oldtag(oldtag==index)=[];
end
seeds=seeds';
end