ゼロ要素を無視して、行列に対して高速のMatlabアルゴリズムを実行したいと思います。
過去には、非常に遅いdouble-for-loopで作業していました。
for i = 1 : size(x,1)
for j = 1 : size(x,2)
if x(i,j) ~= 0
... do something with x(i,j)
end
end
end
しかし、どうすれば行列x全体に対して行列演算を行うことができますか?たとえば、どうすれば実行できますか
x(i,j) = log(x(i,j)) if x>0 else 0 <-- pseudo code
forループのない行列全体のMatlabで?
最後に次のような行を書き直したい
result = sum(sum((V.*log(V./(W*H))) - V + W*H));
ゼロを無視します。
概念を理解する必要があります。必要に応じて、ゼロの代わりにNaNを使用することもできますが、関数などが見つかりませんでした。
nanlog()