本征不能直接从矩阵均值创建向量

时间:2019-01-05 06:10:32

标签: c++ eigen

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

那可能是什么原因造成的?

1 个答案:

答案 0 :(得分:3)

您的问题不是很清楚,但我想您正在寻找.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();