快速设置稀疏矩阵的多个值

时间:2015-09-07 16:42:12

标签: matlab matrix sparse-matrix

我在MATLAB中有一个稀疏的5018x5018矩阵,它有大约100k的值设置为1(即空的约99.6%)。

我试图将大约5%的零翻转为1(即大约1.25米的条目)。我在要翻转的矩阵中有x和y索引。

这就是我所做的:

sizeMat=size(network);
idxToReplace=sub2ind(sizeMat,x_idx, y_idx);
network(idxToReplace) = 1;

这非常慢,尤其是最后一行。有没有办法让这个操作运行得更快,最好不使用mex文件?

1 个答案:

答案 0 :(得分:6)

这应该更快:

idxToReplace=sparse(x_idx,y_idx,ones(size(x_idx),size(matrix,1),size(matrix,2)); % Create a sparse with ones at locations
network=network+idxToReplace; % Add the two matrices

我认为你的解决方案非常慢,因为你用你的点创建了一个1.26e6逻辑数组,然后将它们存储在稀疏矩阵中。在我的解决方案中,您只创建一个稀疏矩阵,并将两者相加。