MATLAB:为什么全/稀疏矩阵除了不是全/全矩阵除了慢?(Matlab: Why is full/

2019-09-29 09:07发布

为什么加入稀疏和全矩阵不是增加两个全矩阵慢? 下面的代码演示了一贯的卓越性能hFullAddFull

I_FULL = 600;
J_FULL = 10000;
FULL_COUNT = I_FULL*J_FULL;
NON_ZERO_ELEMENT_COUNT = 1000;

nonZeroIdxs = randsample(FULL_COUNT, NON_ZERO_ELEMENT_COUNT);
mat_Sp = spalloc(I_FULL, J_FULL, NON_ZERO_ELEMENT_COUNT);
mat_Sp(nonZeroIdxs) = 0.5;
mat_Full = full(mat_Sp);

otherMat_Full = rand(I_FULL, J_FULL);

hFullAddSp = @()otherMat_Full+mat_Sp;
hFullAddFull = @()otherMat_Full+mat_Full;

timeit(hFullAddSp)
timeit(hFullAddFull)

对我来说这很重要,因为添加被称为次10,000s一段关键代码内发生,所以对于稀疏此外,小的性能下降是至关重要的。 我宁愿让我的代码的利用稀疏类型输入计算和具有最终矩阵作为一个完整的矩阵。 当然全矩阵的1000个元素可以简单地修改? 这是怎么回事下面在这里? 有没有一种方法,使稀疏/全除了更快? 将一个MEX实现更快?

在我的机器hFullAddFull是快30%。

文章来源: Matlab: Why is full/sparse matrix addition slower than full/full matrix addition?