H、W、R、V は行列で、それぞれのサイズで既に初期化されています。「beta」は int、「myeps」は float です。行列の実装には、現在 Eigen ライブラリを使用しています。ただし、この Matlab コードを Eigen ベースの C++ コードに正常に変換するための構文がわかりません。
Matlab コード
H = H .* ( (W'*(R.^(beta-2) .* V)) ./ max(W'*R.^(beta-1), myeps) );
C++ コード (これまでに試したこと)
WH = W_ * H_;
Eigen::MatrixXf j=(W_.transpose().array()*(WH.array().pow((beta2)).cwiseProduct(V.array())));
Eigen::MatrixXf k=(W_.transpose().array()*((WH.array().pow(beta-1))));
float m=max(k.maxCoeff(),0.001);
H_ = H_.cwiseProduct(j/m);
このコードは正しいですか?
参考までに - これは NMF アルゴリズム (ベータ発散に基づく非負行列因数分解) のステップです。
どんな助けでも大歓迎です。