【问题标题】: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 的回答中缺少什么?如果它回答了您的问题,您应该将其标记为您问题的答案。如果没有,请发布回复,详细说明您需要哪些额外帮助。

标签: c++ matrix eigen


【解决方案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);

【讨论】:

    猜你喜欢
    • 2018-07-16
    • 1970-01-01
    • 2022-06-14
    • 1970-01-01
    • 2022-07-06
    • 2011-09-29
    • 1970-01-01
    • 2023-04-08
    • 1970-01-01
    相关资源
    最近更新 更多