【发布时间】:2018-06-28 05:47:42
【问题描述】:
我正在尝试在 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_;
}
我的问题是我该如何做centered.rowwise().array()之类的事情?
【问题讨论】:
-
你想用
centered.rowwise()/std_完成什么操作?据我所知,数学没有一个标准的方法来将一个矩阵除以另一个,所以我看不出它的意图是什么。 -
正如我上面解释的那样,我试图简单地标准化数据(即零均值和单位标准偏差)。
Xnorm = (X - np.mean(X, axis=0))/(np.std(X, axis=0))是等效的 numpy 操作。 -
不,你没有在上面解释。您刚刚说这是主要标准化步骤中的“一个功能”,但您忽略了说这个特定的“转换”应该在该步骤中完成什么。 (如果您愿意,请更清楚地说明。)无论如何,我熟悉的规范化涉及乘/除以一个标量,而不是一个向量,所以我会把它留给理解你在说什么的人。跨度>
-
当然,我已经在问题中添加了描述。感谢您的建议。