设置在这里。
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;
关于matlab - 如何在Matlab中加速/避免大型矩阵的乘法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5467423/