3

设置在这里。

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

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

太感谢了!

4

1 回答 1

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;
于 2011-03-29T03:15:49.063 回答