我正在写一个返回排列矩阵的函数。在里面,它做这样的事情
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/