特征矩阵逐行加法

时间:2017-12-15 15:09:57

标签: c++ eigen

我有一个Nx3特征矩阵,表示3d空间中一组顶点的位置。 我试图在Nx3中的每一行添加一个1x3矩阵,以便将每个点移动到给定的方向和距离。

#include <Eigen/Dense>
int N = 20; //for example
MatrixXf N3(N, 3);
N3.fill(2);
MatrixXf origin(1, 3);
origin << 1, 2, 3;

现在我想将原点添加到N3中的每一行,因此N3在每一行中变为3,4,5。 (N3中的值都是实际代码中不同的3d顶点位置。)

3, 4, 5
3, 4, 5
3, 4, 5 etc...

3 个答案:

答案 0 :(得分:1)

你可以写一下

N3 += origin.replicate(N,1);

请注意,没有创建临时矩阵,replicate()会返回表达式。

答案 1 :(得分:0)

试试这个(未经测试的)

for (int i = 0 ;  i < 3 ; i++)
    N3.block(i, 0, 1, 3) = N3.block(i, 0, 1, 3) + origin

我不记得是否支持+ =

答案 2 :(得分:0)

MatrixXf result = N3 + MatrixXf::Constant(1, N, 1) * origin;

应该很简单。