从具有行主顺序的数组创建特征矩阵

Posted

技术标签:

【中文标题】从具有行主顺序的数组创建特征矩阵【英文标题】:Creating an Eigen matrix from an array with row-major order 【发布时间】:2015-02-25 15:27:58 【问题描述】:

我有一个双精度数组,我想使用 Eigen 库创建一个 4×4 矩阵。我还想指定数据以行优先顺序存储。我该怎么做?

我尝试了以下方法,但无法编译:

double data[16];
Eigen::Matrix4d M = Eigen::Map<Eigen::Matrix4d>(data, 4, 4, Eigen::RowMajor);

【问题讨论】:

你得到什么错误? ggael 的回答中缺少什么?如果它回答了您的问题,您应该将其标记为您问题的答案。如果没有,请发布回复,详细说明您需要哪些额外帮助。 【参考方案1】:

您需要将行优先矩阵类型传递给 Map,例如:

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

那么你可以使用M作为特征矩阵,数据的值会被修改,例如:

M = M.inverse();

如果要将数据复制到真正的列主特征矩阵,请执行以下操作:

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

当然,你也可以通过对 M 使用正确的类型来复制到行主矩阵。

【讨论】:

使用动态并将尺寸传递给ctor:Map&lt;Matrix&lt;double,Dynamic,Dynamic,RowMajor&gt; &gt;(data, nbRows, nbColumns);【参考方案2】:

在使用数组存储数据时,RowMajor 表单实际上会派上用场。因此,您也可以更喜欢使用 typedef 而不是 RowMajor 类型。

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

您可以用任何选择的数据类型替换为浮点数。那么对于一个 4x4 矩阵,我们可以简单地做

Eigen::MatrixXfRowMajor mat;
mat.resize(4,4);

【讨论】:

以上是关于从具有行主顺序的数组创建特征矩阵的主要内容,如果未能解决你的问题,请参考以下文章

如何在 scipy 稀疏矩阵中确定索引数组的顺序?

从执行顺序操作的向量创建三角矩阵

数组都有哪些特点?

以螺旋顺序打印二维数组

c语言二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数

从特征数组/矩阵的行中填充 std::vector