犰狳稀疏矩阵乘法与MATLAB相比极慢,如何加速?

问题描述

以下 MATLAB 代码片段实现大规模矩阵乘法(2 秒 /10 ):

tic
%comment:2 sec
for i =1:10
    G0 = K*sparse( diag(f>0) )*K';
    h1 = G0+1.*eye(size(G0));%hessian
end
toc

matlab 例程 sparse() 从密集矩阵创建一个稀疏矩阵,这将乘法速度提高了 3 倍以上。 (6.5 / 2)

tic
%comment:6.5 sec
for i =1:10
    G0 = K*diag(f>0)*K';%heavyside output:0|1
    h1 = G0+1.*eye(size(G0));%hessian
end
toc

对于犰狳&C++,同样的乘法需要更长的时间。对于稠密矩阵,循环10次需要240多秒:

int n = K.n_cols;
int m = K.n_rows;
mat ma(n,n,fill::zeros);
vec flag = vec(n,fill::zeros);
flag.elem(find(f > 0)).ones();
ma.diag() = flag;
h0 = K * ma *K.t() +a0 * eye(m,m);

如果我使用稀疏矩阵来加速运算,它变得更加耗时(超过 600 秒):

int n = K.n_cols;
int m = K.n_rows;
sp_mat ma(n,n);
vec flag = vec(n,fill::zeros);
flag.elem(find(f > 0)).ones();
ma.diag() = flag;
h0 = K * ma *K.t() +a0 * speye(m,m);

我的问题是:为什么挤出所有零元素不能加速乘法?还有其他方法可以使用犰狳加速乘法吗?

附加了所有相关数据here

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...