Проблемы преобразования следующего матричного кода в Matlab в Eigen в C ++

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);

Правильно ли этот код?

FYI - это шаг в алгоритме NMF (неотрицательная матричная факторизация, основанная на бета-расходимости).

Любая помощь будет принята с благодарностью.

  • 2
    Итак, что вы пробовали? С чем у вас проблемы? Компонентные операции?
  • 0
    До сих пор у меня есть этот код ... это правильно? WH = W_ * H_; Eigen :: MatrixXf j = (W_.transpose (). Array () * (WH.array (). Pow ((beta-2)). CwiseProduct (V.array ()))); Eigen :: MatrixXf k = (W_.transpose (). Array () * ((WH.array (). Pow (beta-1)))); float m = max (k.maxCoeff (), 0,001); H_ = H_.cwiseProduct (Дж / м);
Теги:
eigen
matrix
eigen3

2 ответа

1
Лучший ответ

Это не кажется правильным. * на массивах эквивалентно cwiseProduct то время как вам нужен матричный продукт с W'. Предложение:

Eigen::MatrixXf j = (W.transpose() * (R.array().pow(beta-2)*V.array()).matrix());
Eigen::MatrixXf k = (W.transpose() *  R.array().pow(beta-1).matrix());
H = H.cwiseProduct(j/max(k.maxCoeff(),myeps));
0

Я рекомендую вам ознакомиться с этой быстрой ссылкой:

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

Он содержит отображения между Eigen и Matlab.

Например:

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

а также

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

Как вы можете видеть, этот Розеттский камень может помочь вам перевести свои выражения.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню