从具有行主顺序的数组创建特征矩阵
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<Matrix<double,Dynamic,Dynamic,RowMajor> >(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);
【讨论】:
以上是关于从具有行主顺序的数组创建特征矩阵的主要内容,如果未能解决你的问题,请参考以下文章
c语言二维数组中的查找,杨氏矩阵在一个二维数组中,每行都依照从左到右的递增的顺序排序,输入这种一个数组和一个数,推断数组中是否包括这个数