增加稀疏矩阵中的值需要很长时间

时间:2012-10-07 00:19:59

标签: matlab

我正在运行以下代码,其中M是~200,000乘〜200,000稀疏矩阵,points是〜200,000乘2矩阵

inds=sub2ind(size(M),points(:,1),points(:,2));
M(inds)=M(inds)+1;

问题是第二行需要很长时间才能运行(15-90秒)。 操作需要更长时间,具体取决于inds中有多少索引为'new'(即稀疏矩阵中没有值)

有更有效的方法吗?

1 个答案:

答案 0 :(得分:4)

这是一个想法:

M = M + sparse(points(:,1),points(:,2),1,size(M,1),size(M,2),size(points,1));

Just so you know,

  

S = sparse(i,j,s,m,n,nzmax)使用向量ijs生成   m - by - n稀疏矩阵,S(i(k),j(k)) = s(k),带空格   分配给nzmax非零。向量ijs都是相同的   长度。 s为零的任何元素都将被忽略   相应的ij值。 s的任何元素都有重复   ij的值会加在一起。

对于好奇:

M = sprand(200000,200000,1e-6);
points = [randperm(200000) ; randperm(200000)]'; %'//Initialization over
Mo = M;
tic; 
inds=sub2ind(size(Mo),points(:,1),points(:,2));
Mo(inds) = Mo(inds)+1;
toc
tic; 
M = M + sparse(points(:,1),points(:,2),1,size(M,1),size(M,2),size(points,1));
toc