我还有问题继续my previous question。现在我想在一种类型中传递两种特征参数:(1)固定大小的矩阵或(2)行是固定的但是cols是动态的。两个矩阵的行总是应该是3.你的修改函数是:
template<typename Derived>
typename Derived::PlainObject bar(const Eigen::MatrixBase<Derived>& v)
{
// EIGEN_STATIC_ASSERT_FIXED_SIZE(Derived);
// EIGEN_STATIC_ASSERT(Derived::RowsAtCompileTime == 3,
// THIS_METHOD_IS_ONLY_FOR_MATRICES_OF_A_SPECIFIC_SIZE);
assert(v.rows() == 3);
typename Derived::PlainObject ret;
std::cout << "v size : " << v.rows() << ", " << v.cols() << std::endl;
std::cout << "ret size: " << ret.rows() << ", " << ret.cols() << std::endl;
return ret;
}
我想创建变量,其大小与函数中传递的参数v
相同。传递固定大小的矩阵很好,但不适用于动态(列)大小矩阵。动态尺寸矩阵的ret
列数为0。
void main()
{
int n = 1000;
Eigen::Matrix<double, 3, Dynamic> A1 = Eigen::Matrix<double, 3, Dynamic>::Random(3, n);
Eigen::Matrix<double, 3, 1000> B1 = Eigen::Matrix<double, 3, 1000>::Random();
Eigen::Matrix<double, 3, Dynamic> A2 = bar(A1);
Eigen::Matrix<double, 3, 1000> B2 = bar(B1);
}
输出:
v size : 3, 1000
ret size: 3, 0
v size : 3, 1000
ret size: 3, 1000
是否有一致的方法来创建变量,其大小与固定大小矩阵和动态(列)大小矩阵的传递参数相同?或者无法在一种数据类型中传递它们?
提前致谢!
答案 0 :(得分:2)
由于列数仅在运行时已知(它不属于该类型),因此您需要在创建矩阵ret时指定它,如下所示:
template<typename Derived>
typename Derived::PlainObject bar(const Eigen::MatrixBase<Derived>& v)
{
typename Derived::PlainObject ret(v.rows(), v.cols());
std::cout << "v size : " << v.rows() << ", " << v.cols() << std::endl;
std::cout << "ret size: " << ret.rows() << ", " << ret.cols() << std::endl;
return ret;
}
在此更改后,您会在以下两种情况下获得预期答案:
v size : 3, 1000
ret size: 3, 1000
v size : 3, 1000
ret size: 3, 1000