2011-03-29 152 views
3

设置在这里。如何在Matlab中加速/避免乘法大矩阵?

X:6000x8000非稀疏矩阵

B:8000x1稀疏矢量与只有几十非零的

d:正数

L:被sparsified X'X,即阈值化在量级上小于d的元素为0. 只剩下数百个元素。所以(X'* X - M)有许多小的元素,并不稀疏。我想计算矢量y =(X'* X - M)* B,并可以重写为y = X'*(X * B) - M * B。第一部分速度够快,但第二部分涉及X'* X,速度非常慢。

任何人都可以帮助我加速这种计算吗?

非常感谢!

回答

1

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

nzIndex = find(B); 

然后你就可以改变你的y计算如下:

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