【问题标题】:How to accelerate/avoid multiplication for large matrices in Matlab?如何在 Matlab 中加速/避免大型矩阵的乘法?
【发布时间】:2011-07-24 22:57:45
【问题描述】:

设置在这里。

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

谁能帮我加速这个计算?

谢谢一百万!

【问题讨论】:

    标签: matlab matrix-multiplication


    【解决方案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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-25
      • 2011-11-30
      • 2017-02-15
      • 1970-01-01
      • 1970-01-01
      • 2018-12-17
      • 2017-08-16
      • 2012-07-28
      相关资源
      最近更新 更多