使用条件

时间:2016-06-28 04:58:24

标签: matlab matrix average

以下MATLAB代码永远在10 ^ 5方阵A上运行。但是,它在10 ^ 3方阵上运行几秒钟。有没有办法加快速度?

function [meanNV]=calcMeanNV_k(A,V,d)
%A: input matrix (n x n)
%V: eigenvectors of k-th largest eigenvalues (n x 1)
%d: degrees of each node (n x 1)
%meanNV: mean of neighbors vectors (n x 1)
m=size(A,2);
meanNV=zeros(113336);
 for i=1:m
     sumNode = 0;
     for j=1:m
        if A(i,j)==1
            sumNode=sumNode+V(j);
        end
     end
    [meanNV(i)]=sumNode/d(i); 
 end

2 个答案:

答案 0 :(得分:2)

简单地说,对于A中的每一行,您要确定非零的位置,并使用这些索引对V中的相应位置求和并除以{中的相应条目{1}}。

首先使用find确定非零行和列位置,然后使用accumarray按公共行对所有列位置进行分组,并在d上应用的函数将索引到accumarray后,只需将所有索引求和。

这样的事情可行:

V

答案 1 :(得分:1)

这有效:

function [meanNV]=calcMeanNV_k1(A,V,d)
%A: input matrix (n x n)
%V: eigenvectors of k-th largest eigenvalues (n x 1)
%d: degrees of each node (n x 1)
%meanNV: mean of neighbors vectors (n x 1)
tic
m=size(A,2);
meanNV=zeros(m,1);
idx = A == 1;
for k = 1:m
   meanNV = sum(V(idx(k,:)));
end
meanNV = meanNV./d;
toc