0

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 アルゴリズム (ベータ発散に基づく非負行列因数分解) のステップです。

どんな助けでも大歓迎です。

4

2 に答える 2

0

このクイック リファレンスをご覧になることをお勧めします。

http://eigen.tuxfamily.org/dox/AsciiQuickReference.txt

Eigen と Matlab 間のマッピングが含まれています。

例えば:

R = P.cwiseProduct(Q);    // R = P .* Q

R.array().square()        // P .^ 2

ご覧のとおり、このロゼッタ ストーンはあなたの表現を翻訳するのに役立ちます。

于 2013-10-26T19:47:27.580 に答える