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();