我在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文件?
答案 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
逻辑数组,然后将它们存储在稀疏矩阵中。在我的解决方案中,您只创建一个稀疏矩阵,并将两者相加。