Собственное матричное векторное деление - PullRequest
0 голосов
/ 27 июня 2018

Я пытаюсь реализовать нормализатор в Eigen.

Функциональность, которую он пытается достичь, следующая:

Xnorm = (X - np.mean(X, axis=0))/(np.std(X, axis=0)) (эквивалентная цифра)

На основном этапе нормализации у меня есть функция:

typedef Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor>
    matrix_eig;
typedef Eigen::Matrix<float, Eigen::Dynamic, Eigen::RowMajor> vector_eig;

matrix_eig Normalizer::Transform(const matrix_eig &X) {
  // mean_ and std_ are vector_eig types
  matrix_eig centered = X.rowwise() - mean_.transpose();
  // Below line doesnt work since '/' is not allowed for matrices
  return centered.rowwise()/std_;
}

У меня вопрос, как именно я могу сделать что-то вроде centered.rowwise().array()?

1 Ответ

0 голосов
/ 28 июня 2018

Вопрос:

как именно мне сделать что-то вроде centered.rowwise().array()

ответ так же прост:

centered.array().rowwise()

Таким образом, вы должны написать деление как:

return centered.array().rowwise() / std_.array();

Кстати, также есть ошибка в определении vector_eig. Если вы хотите вектор строки, то это:

typedef Eigen::Matrix<float, 1, Eigen::Dynamic> vector_eig;

или просто:

typedef Eigen::RowVectorXf vector_eig;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...