本征矩阵矢量分部

时间:2018-06-27 16:55:50

标签: c++ eigen eigen3

我正在尝试在Eigen中实现规范化器。

它试图实现的功能如下:

Xnorm = (X - np.mean(X, axis=0))/(np.std(X, axis=0))(相当于numpy)

在主要规范化步骤中,我具有以下功能:

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 :(得分:2)

问题:

  

我该怎么做类似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;