代码之家  ›  专栏  ›  技术社区  ›  P_B

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

  •  0
  • P_B  · 技术社区  · 10 月前

    我很难弄清楚:如何使用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
    

    我做错了什么?谢谢!

    1 回复  |  直到 10 月前
        1
  •  1
  •   Ajay    10 月前

    如果我没理解错的话,你是在试图减去 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