从按行主序的数组创建Eigen矩阵

9
我有一个双精度数组,想要使用Eigen库创建一个4x4的矩阵。我还想指定数据以行为主存储。请问如何实现?
我尝试了下面的代码,但是它无法编译:
double data[16];
Eigen::Matrix4d M = Eigen::Map<Eigen::Matrix4d>(data, 4, 4, Eigen::RowMajor);

1
你得到了哪些错误? - Peter Goldsborough
ggael的回答有什么不足之处吗?如果它回答了你的问题,你应该将其标记为你问题的答案。如果没有,那么请发布一个响应,详细说明你需要什么额外的帮助。 - Phil
2个回答

20

你需要向Map函数传递行主序矩阵类型,例如:

Map<Matrix<double,4,4,RowMajor> > M(data);

那么您可以使用M作为一个Eigen矩阵,数据的值将被修改,例如:

M = M.inverse();

如果你想要将数据复制到一个真正的按列主序的Eigen矩阵中,则可以执行以下操作:

Matrix4d M = Map<Matrix<double,4,4,RowMajor> >(data);

当然,您也可以使用适合M的正确类型将其复制到行主要矩阵中。


8
使用 Dynamic 并将尺寸传递给构造函数:Map<Matrix<double,Dynamic,Dynamic,RowMajor> >(data, nbRows, nbColumns); - ggael

1

当使用数组存储数据时,RowMajor形式有时会很有用。因此,您也可以优先使用typedef到RowMajor类型。

namespace Eigen{ 
    typedef Eigen::Matrix<float, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> MatrixXfRowMajor;
}

你可以用任何类型的数据替换float。对于一个4x4矩阵,我们可以简单地执行:
Eigen::MatrixXfRowMajor mat;
mat.resize(4,4);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接