Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
回复
 
主题工具 显示模式
旧 2019-12-14, 20:46   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 如何在Matlab中加速/避免大型矩阵的乘法?

设置在这里。

X:6000x8000非稀疏矩阵

B:只有几十个非零的8000x1稀疏向量

d:正数

M:是稀疏的X'X,即将小于d的元素的阈值阈值设为0。仅保留数百个元素。因此(X'* X-M)有很多小元素,并不稀疏。

我想计算向量y =(X'* X-M)* B并可以重写为y = X'*(X * B)-M * B。第一部分足够快,但是第二部分涉及X'* X,并且非常慢。

有人可以帮助我加快计算速度吗?

太感谢了!



回答:

您解释说B非常稀疏:长度为8000的列数组中有数十个非零值。因此,我认为您可以按以下方式加快B的乘法速度。首先,您可以在B找到非零值的索引:

nzIndex = find(B); 然后,您可以按如下方式更改y的计算:

Bnz = B(nzIndex); %# Non-zero values in B y = X.'*(X(:,nzIndex)*Bnz) - M(:,nzIndex)*Bnz;

更多&回答...
poster 当前离线   回复时引用此帖
回复


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 23:43


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.