H, W, R, V являются матрицами и уже инициализированы соответствующими размерами. «beta» - это int, «myeps» - это float. Для реализации матрицы я в настоящее время использовал Eigen-библиотеку. Однако я не уверен в синтаксисе, чтобы успешно преобразовать этот код Matlab в Cigen-код на основе 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);
Является ли этот код правильно?
FYI - Это шаг в алгоритме NMF (неотрицательная матричная факторизация на основе бета-расхождения).
Любая помощь была бы принята с благодарностью.
Итак, что вы пробовали? С чем вы сталкиваетесь? Компонентные операции? – PeterT
До сих пор у меня этот код ... это правильно? WH = W_ * H_; \t \t Eigen :: MatrixXf j = (W_.transpose(). Array() * (WH.array(). Pow ((beta-2)). CwiseProduct (V.array()))); \t \t Eigen :: MatrixXf k = (W_.transpose(). Array() * ((WH.array(). Pow (beta-1)))); \t \t float m = max (k.maxCoeff(), 0.001); \t \t H_ = H_.cwiseProduct (j/m); –