如何从矩阵 Eigen C++ 中减去均值向量

问题描述 投票:0回答:1

我无法弄清楚:如何使用 C++ lib Eigen 从矩阵中进行广播向量减法?

当我尝试这样的事情时:

  Vector3d mean;
  mean << 2, 3, -1;

  MatrixXd pts(5, 3);
  pts << 0, 0, 0,
         1, 0, 0,
         0, 1, 0,
         0, 0, 1,
         1, 1, 0;

  MatrixXd results(5, 3);
  results = pts.colwise() - mean;

我得到以下结果:

-2.00000 -2.00000 -2.00000
-2.00000 -3.00000 -3.00000
1.00000 2.00000 1.00000
-2.00000 -2.00000 ovf
-3.00000 -3.00000 0.00000

我做错了什么?谢谢!

c++ matrix vector eigen
1个回答
0
投票

如果我正确理解了这个问题,那么您正在尝试从

mean
矩阵的每一行中减去
pts
向量。问题是您使用的是
colwise()
而不是
rowwise()

    using Eigen::MatrixXd;
    using Eigen::Vector3d;

    Vector3d mean;
    mean << 2, 3, -1;

    MatrixXd pts(5, 3);
    pts << 0, 0, 0,
            1, 0, 0,
            0, 1, 0,
            0, 0, 1,
            1, 1, 0;

    MatrixXd results(5, 3);
    results = pts.rowwise() - mean.transpose();

此代码产生:

-2 -3  1
-1 -3  1
-2 -2  1
-2 -3  2
-1 -2  1
© www.soinside.com 2019 - 2024. All rights reserved.