为什么添加稀疏和完整矩阵比添加两个完整矩阵要慢?以下代码演示了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%。