Matlab:为什么全/稀矩阵加法比完全/全矩阵加法慢?

时间:2018-04-19 23:45:44

标签: matlab operator-overloading sparse-matrix addition

为什么添加稀疏和完整矩阵比添加两个完整矩阵要慢?以下代码演示了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,000次的关键代码段中,因此稀疏添加的小的性能降低是至关重要的。我宁愿将我的代码保留为稀疏类型作为计算的输入,并将最终矩阵作为完整矩阵。当然可以简单地修改完整矩阵的1000个元素吗?这下面发生了什么?有没有办法让稀疏/完全添加更快? mex实现会更快吗?

在我的计算机hFullAddFull上快30%。

0 个答案:

没有答案