专有矩阵向量除法
Eigen Matrix Vector Division
我正在尝试在 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()
之类的事情?
问题:
how exactly do I do something like 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;
我正在尝试在 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()
之类的事情?
问题:
how exactly do I do something like
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;