H、W、R、V 是矩阵,并且已经用各自的大小进行了初始化。“beta”是一个整数,“myeps”是一个浮点数。对于矩阵实现,我目前使用了 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 算法中的一个步骤(基于 beta 散度的非负矩阵分解)。
任何帮助将不胜感激。