Matlab不优化以下内容吗?

时间:2013-11-01 21:03:14

标签: matlab matrix sparse-matrix

我有一个非常长的向量1xr v,一个非常长的向量w 1xs,以及一个矩阵A rxs,它是稀疏的(但尺寸非常大)。 / p>

我希望Matlab能够优化以下内容,这样我就不会遇到内存问题:

 A./(v'*w)

但似乎Matlab实际上是在尝试生成完整的v'*w矩阵,因为我遇到了内存不足的问题。有办法克服这个问题吗?请注意,无需计算所有v'*w,因为A的许多值均为0

编辑:如果可行,那么一种方法就是A(find(A))./(v'*w)(find(A));

但是你不能先选择一个矩阵的子集(在这种情况下是v'*w)而不先计算它并将它放在一个变量中。

1 个答案:

答案 0 :(得分:6)

  • 您可以使用bsxfun。这会产生与A./(v'*w)相同的结果,而不会生成矩阵v.'*w

    bsxfun(@rdivide, bsxfun(@rdivide, A, v'), w)
    
  • 另一种可能性:如果您只想要非零值,请使用:

    [ii jj Anz] = find(A);
    Anz./v(ii)'./w(jj).'
    

    这会提供与您的A(find(A))./(v'*w)(find(A))对应的列向量,同样不会生成v.'*w。如果您需要稀疏矩阵A./(v'*w)(而不是其非零值的列向量),请使用sparse(ii,jj,Anz./v(ii)'./w(jj).')