特征矩阵向量除法

tan*_*ngy 1 c++ eigen eigen3

我正在尝试在 Eigen 中实现一个 Normalizer。

它试图实现的功能如下:

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_;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是我到底该怎么做centered.rowwise().array()

gga*_*ael 5

问题:

我到底该怎么做 centered.rowwise().array()

答案很简单:

centered.array().rowwise()
Run Code Online (Sandbox Code Playgroud)

因此,您应该将除法写为:

return centered.array().rowwise() / std_.array();
Run Code Online (Sandbox Code Playgroud)

顺便说一句,.的定义也有错误vector_eig。如果你想要一个行向量,那么它是:

typedef Eigen::Matrix<float, 1, Eigen::Dynamic> vector_eig;
Run Code Online (Sandbox Code Playgroud)

或者干脆:

typedef Eigen::RowVectorXf vector_eig;
Run Code Online (Sandbox Code Playgroud)