在Eigen中将动态矩阵投射到固定矩阵

时间:2017-06-06 17:54:47

标签: c++ eigen

为了灵活性,我使用C ++库Eigen将数据加载到动态大小的矩阵(例如Eigen::MatrixXf)中。我已经编写了一些函数,这些函数需要混合或固定大小的矩阵作为参数(例如Eigen::Matrix<float, 3, Eigen::Dynamic>Eigen::Matrix4f)。假设我对行和列大小做了正确的断言,我如何将动态矩阵(在运行时设置的大小)转换为固定矩阵(在编译时设置的大小)?

我能想到的唯一解决方案是映射它,例如:

Eigen::MatrixXf dyn = Eigen::MatrixXf::Random(3, 100);
Eigen::Matrix<float, 3, Eigen::Dynamic> fixed = 
    Eigen::Map<float, 3, Eigen::Dynamic>(dyn.data(), 3, dyn.cols());

但是我不清楚这是否会起作用,因为固定大小的地图构造函数不接受行和列作为the docs中的参数。有更好的解决方案吗?简单地分配动态到固定大小的矩阵是行不通的。

1 个答案:

答案 0 :(得分:5)

您可以将Ref用于此目的,它在您的情况下的用法更简单,它将为您执行运行时断言检查,例如:

MatrixXf A_dyn(4,4);
Ref<Matrix4f> A_fixed(A_dyn);

你甚至可能需要一个固定的外跨步和对齐的记忆:

 Ref<Matrix4f,Aligned16,OuterStride<4> > A_fixed(A_dyn);

在这种情况下,A_fixed非常像Matrix4f