klo*_*oop 7 matlab matrix sparse-matrix
我有一个非常长的向量1xr v
,一个非常长的向量w
1xs,和一个矩阵A
rxs,它是稀疏的(但尺寸非常大).
我期待Matlab优化以下内容,所以我不会遇到内存问题:
A./(v'*w)
Run Code Online (Sandbox Code Playgroud)
但似乎Matlab实际上是在尝试生成完整的v'*w
矩阵,因为我遇到了内存不足的问题.有办法克服这个问题吗?请注意,不需要计算所有v'*w
值,因为很多值A
都是0
.
编辑:如果可能的话,一种方法就是这样做 A(find(A))./(v'*w)(find(A));
但是你不能先选择一个矩阵的子集(v'*w
在这种情况下),而不先计算它并将它放在一个变量中.
你可以用bsxfun
.这给出了与A./(v'*w)
不生成矩阵相同的结果v.'*w
:
bsxfun(@rdivide, bsxfun(@rdivide, A, v'), w)
Run Code Online (Sandbox Code Playgroud)另一种可能性:如果您只想要非零值,请使用:
[ii jj Anz] = find(A);
Anz./v(ii)'./w(jj).'
Run Code Online (Sandbox Code Playgroud)
这会给出与您对应的列向量A(find(A))./(v'*w)(find(A))
,同样不会生成v.'*w
.如果您需要稀疏矩阵A./(v'*w)
(而不是其非零值的列向量),请使用sparse(ii,jj,Anz./v(ii)'./w(jj).')
.