如何在Matlab中加速/避免大型矩阵的乘法?

时间:2011-03-29 02:58:55

标签: matlab matrix-multiplication

设置在这里。

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,并且非常慢。

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

万分感谢!

1 个答案:

答案 0 :(得分: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;