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

Jef*_*eff 3 matlab matrix sparse-matrix

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

我试图将这些零中的大约5%翻转为1(即大约1.25m条目).我想要翻转的矩阵中有x和y索引.

这是我做的:

sizeMat=size(network);
idxToReplace=sub2ind(sizeMat,x_idx, y_idx);
network(idxToReplace) = 1;
Run Code Online (Sandbox Code Playgroud)

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

Adr*_*aan 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
Run Code Online (Sandbox Code Playgroud)

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