设置稀疏矩阵多个值的快速方法
Fast way to set many values of sparse matrix
我在 MATLAB 中有一个稀疏的 5018x5018 矩阵,它有大约 100k 个值设置为 1(即,大约 99.6% 是空的)。
我正在尝试将这些零中的大约 5% 翻转为 1(即,大约 125 万个条目)。我在要翻转的矩阵中有 x 和 y 索引。
这是我所做的:
sizeMat=size(network);
idxToReplace=sub2ind(sizeMat,x_idx, y_idx);
network(idxToReplace) = 1;
这太慢了,尤其是最后一行。有没有什么方法可以使这个操作 运行 明显更快,最好不使用 mex 文件?
这应该会更快:
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
逻辑数组,然后将它们存储在稀疏矩阵中。在我的解决方案中,您只创建一个稀疏矩阵并将两者相加。
我在 MATLAB 中有一个稀疏的 5018x5018 矩阵,它有大约 100k 个值设置为 1(即,大约 99.6% 是空的)。
我正在尝试将这些零中的大约 5% 翻转为 1(即,大约 125 万个条目)。我在要翻转的矩阵中有 x 和 y 索引。
这是我所做的:
sizeMat=size(network);
idxToReplace=sub2ind(sizeMat,x_idx, y_idx);
network(idxToReplace) = 1;
这太慢了,尤其是最后一行。有没有什么方法可以使这个操作 运行 明显更快,最好不使用 mex 文件?
这应该会更快:
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
逻辑数组,然后将它们存储在稀疏矩阵中。在我的解决方案中,您只创建一个稀疏矩阵并将两者相加。