私は非常に長いベクトル1xr v
、非常に長いベクトルw
1xs、および行列A
rxsを持っています。これはスパースですが(寸法は非常に大きいです)。Matlabは以下を最適化していませんか?
私はMATLABが最適化されるように、次のように私はメモリとのトラブルに実行されません期待していた:私はので、MATLABは、実際にフルv'*w
行列を生成しようとしているよう
A./(v'*w)
が、それはそうですメモリ不足の問題が発生しています。これを克服する方法はありますか? A
の多くの値が0
であるため、すべてv'*w
を計算する必要はありません。
EDIT:それができなかった場合は、それを行うための一つの方法は、A(find(A))./(v'*w)(find(A));
を行うことであろうが、あなたが最初にそれを計算し、それをかけることなく、マトリックス(この場合はv'*w
)のサブセットを選択することはできません変数。
あなたはおそらく[ 'spfun'](http://www.mathworks.com/help/matlab/ref/spfun.html)の代わりに使用したい - "スパース行列の非ゼロ要素に関数を適用する" –
mmm ... spfunは良いリードかもしれませんが、私はこの場合どのように使用するか分かりません。まず、評価された関数は、それが適用された行列セルのインデックスを知らない。 – kloop