【问题标题】:Sparse vs Normal Array Matlab稀疏与正常数组 Matlab
【发布时间】:2011-03-18 13:43:57
【问题描述】:

在 Matlab 中,如果我仍然需要对稀疏数组进行大量计算,并且大约 25% 的数组是非零的,那么稀疏数组在什么时候比普通数组更好?

【问题讨论】:

    标签: matlab performance sparse-matrix


    【解决方案1】:

    就个人而言,对于只有 25% 非零的数组,我很少会为稀疏而烦恼。不信你自己试试看。

    A = sprand(2000,2000,0.25);
    tic,B = A*A;toc
    Elapsed time is 1.771668 seconds.
    
    Af = full(A);
    tic,B = Af*Af;toc
    Elapsed time is 0.499045 seconds.
    

    作为稀疏矩阵所涉及的额外工作成本太高,不值得费心。现在尝试使用一个非常稀疏的矩阵。

    A = sprand(2000,2000,0.005);
    Af = full(A);
    
    tic,B = A*A;toc
    Elapsed time is 0.037763 seconds.
    
    tic,B = Af*Af;toc
    Elapsed time is 0.446680 seconds.
    

    当然,您自己的问题会有所不同,但不会有那么大的不同。稀疏矩阵对于使用真正稀疏矩阵的人来说是一个真正的福音,但在大多数情况下,25% 的非零值根本不够“稀疏”。

    【讨论】:

      【解决方案2】:

      编辑 - 误读了问题。

      在 75% 的稀疏度下,您很可能会看到稀疏矩阵算法的性能显着提高。我会说这绝对值得一试。

      您将节省的两个地方 - 内存(将内存使用减少四倍)和操作(例如,每次执行矩阵向量乘法时,您将大大减少所需的操作数量)。在您的情况下,缓解因素很可能是矩阵的大小。转向稀疏矩阵运算,您通常会失去在密集矩阵中看到的良好缓存特性。因此,通常存在一个阈值,即从密集到稀疏的移动会导致效率提高。

      【讨论】:

        猜你喜欢
        • 2012-06-20
        • 2020-05-11
        • 1970-01-01
        • 2015-09-02
        • 2012-01-03
        • 2015-05-29
        • 2018-08-22
        • 2016-08-25
        • 2013-04-11
        相关资源
        最近更新 更多