【问题标题】:Fast way to set many values of sparse matrix设置许多稀疏矩阵值的快速方法
【发布时间】:2015-09-07 16:42:12
【问题描述】:

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

我正在尝试将大约 5% 的零翻转为一(即大约 125 万个条目)。我在要翻转的矩阵中有 x 和 y 索引。

这是我所做的:

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

这非常慢,尤其是最后一行。有什么方法可以让这个操作运行得明显更快,最好不使用 mex 文件?

【问题讨论】:

  • 你试过idxToReplace = x_idx + sizeMat(1)*(y_idx-1) 吗?它与sub2ind 相同,但没有开销。它可能会更快

标签: matlab matrix sparse-matrix


【解决方案1】:

这应该更快:

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

【讨论】:

    猜你喜欢
    • 2015-04-07
    • 1970-01-01
    • 2017-12-05
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    • 2020-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多