我正在写一个返回排列矩阵的函数。在里面,它做这样的事情

PermutationMatrix<Dynamic> my_favourite_permutation () {
    Eigen::Matrix<uint, Dynamic, 1> x {4, 3, 1, 2, 0};
    PermutationWrapper<Eigen::Matrix<uint, Dynamic, 1>> p
        = PermutationWrapper<Eigen::Matrix<uint, Dynamic, 1>> (x);
    return p;
}


用例包括类似

auto p = my_favourite_permutation();
cout << p.toDenseMatrix() << endl;


不幸的是,以上代码陷入了静态断言中:

/usr/include/eigen3/Eigen/src/Core/util/StaticAssert.h:32: error: static assertion failed: YOU_MIXED_DIFFERENT_NUMERIC_TYPES__YOU_NEED_TO_USE_THE_CAST_METHOD_OF_MATRIXBASE_TO_CAST_NUMERIC_TYPES_EXPLICITLY
     #define EIGEN_STATIC_ASSERT(X,MSG) static_assert(X,#MSG);


有趣的是,如果我不是return p;而是return p.inverse();

最佳答案

我对Eigen知之甚少,但是PermutationMatrix似乎默认使用uint以外的其他类型的索引。如果要使用uint,则必须在返回类型的template参数中指定它:

PermutationMatrix<Dynamic, Dynamic, uint> my_favourite_permutation() {
    ...
}

关于c++ - 在 Eigen 中创建置换矩阵,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39182148/

10-15 06:48