Eigen 不能直接从矩阵均值创建向量
Eigen cannot create vector from matrix mean directly
我是 Eigen 的新手,我想按行对矩阵进行归一化,所以我的代码是这样的:
int buf[9];
for (int i{0}; i < 9; ++i) {
buf[i] = i;
}
m = Map<MatrixXi>(buf, 3,3);
MatrixXi mean = m.colwise().mean();
VectorXi m2 = Map<VectorXi>(mean.data(), mean.cols());
m.rowwise() -= m2;
这行不通,因为 m2
被解释为垂直,这是什么原因?
顺便说一句,我刚刚发现我无法避免创建一个 mean
矩阵,我认为我可以:
// this works
MatrixXi mean = m.colwise().mean();
VectorXi m2 = Map<VectorXi>(mean.data(), mean.cols());
// this cannot pass the compilation check
VectorXi m2 = Map<VectorXi>(m.colwise().mean().data(), m.cols());
这可能是什么原因?
你的问题不是很清楚,但我猜你正在寻找 .transpose()
。也不需要重新映射 .mean()
:
的结果
Map<MatrixXi> m(buf, 3,3);
VectorXi mean = m.colwise().mean();
m.rowwise() -= mean.transpose();
或者直接使用行向量:
RowVectorXi mean = m.colwise().mean();
m.rowwise() -= mean;
甚至单行:
m.rowwise() -= m.colwise().mean().eval();
我是 Eigen 的新手,我想按行对矩阵进行归一化,所以我的代码是这样的:
int buf[9];
for (int i{0}; i < 9; ++i) {
buf[i] = i;
}
m = Map<MatrixXi>(buf, 3,3);
MatrixXi mean = m.colwise().mean();
VectorXi m2 = Map<VectorXi>(mean.data(), mean.cols());
m.rowwise() -= m2;
这行不通,因为 m2
被解释为垂直,这是什么原因?
顺便说一句,我刚刚发现我无法避免创建一个 mean
矩阵,我认为我可以:
// this works
MatrixXi mean = m.colwise().mean();
VectorXi m2 = Map<VectorXi>(mean.data(), mean.cols());
// this cannot pass the compilation check
VectorXi m2 = Map<VectorXi>(m.colwise().mean().data(), m.cols());
这可能是什么原因?
你的问题不是很清楚,但我猜你正在寻找 .transpose()
。也不需要重新映射 .mean()
:
Map<MatrixXi> m(buf, 3,3);
VectorXi mean = m.colwise().mean();
m.rowwise() -= mean.transpose();
或者直接使用行向量:
RowVectorXi mean = m.colwise().mean();
m.rowwise() -= mean;
甚至单行:
m.rowwise() -= m.colwise().mean().eval();