c++ lambda 函数,用于将 Eigen::VectorXd 转换为 Eigen::MatrixXd
c++ lambda function that converts Eigen::VectorXd to Eigen::MatrixXd
我需要一个将Eigen::VectorXd
转换为Eigen::MatrixXd
的lambda函数,不幸的是,当我尝试通过常量引用传递时,它不起作用。为什么我不能这样做?有什么解决方法吗?
#include <Eigen/Dense>
#include <iostream>
typedef Eigen::Matrix< double, Eigen::Dynamic, 1 > Vec;
typedef Eigen::Matrix< double, Eigen::Dynamic, Eigen::Dynamic > Mat;
int main(int argc, char **argv) {
Vec v (3);
v(0) = 1.0;
v(1) = 2.0;
v(2) = 3.0;
auto lambda = [](Vec vec) {return Eigen::Map<Mat>(vec.data(), vec.size(), 1);};
Mat m = lambda(v);
std::cout << m(0,0) << "n";
std::cout << m(1,0) << "n";
std::cout << m(2,0) << "n";
// does not work
auto lambda2 = [](const Vec& vec) {return Eigen::Map<Mat>(vec.data(), vec.size(), 1);};
return 0; }
错误消息error: invalid conversion from 'const Scalar* {aka const double*}' to 'Eigen::Map<Eigen::Matrix<double, -1, -1>, 0, Eigen::Stride<0, 0> >::PointerArgType {aka double*}' [-fpermissive]
在 const 的情况下,您必须构造一个Map<const TYPE>
:
auto lambda2 = [](const Vec& vec) {return Eigen::Map<const Mat>(vec.data(), vec.size(), 1);};
或者让静态函数Matrix::Map
为您完成正确的工作:
auto lambda2 = [](const Vec& vec) {return Mat::Map(vec.data(), vec.size(), 1);};
相关文章:
- Eigen如何在容器循环中干净地附加矩阵
- 当在带有Eigen的C++中使用GDB时,我如何才能看到更多的大矩阵
- 如何在没有数据拷贝的情况下从指针创建一个Eigen VectorXd对象
- Eigen::VectorXd 和 Boost::Odeint,不起作用
- EIGEN地图类:将C阵列映射到VectorXD指针以有效的方式
- 内存效率-EIGEN :: vectorxd在循环中
- 从一个内存的一个块创建许多eigen :: vectorxd
- 将“Eigen::VectorXd”的集合合并为一个大的“Eigen::VectorXd”
- Un-flatten Eigen::VectorXd to Eigen::MatrixXd
- 两个Eigen::VectorXd的有效(非标准)连接
- 如何使用另一个"Eigen::VectorXd"向量中的值初始化"Eigen::VectorXd",基于索引的"向量<int>"
- 为什么 std::less<Eigen::VectorXd> 编译失败?
- c++ lambda 函数,用于将 Eigen::VectorXd 转换为 Eigen::MatrixXd
- 从eigen :: vectorxd获取矩阵视图/块而无需复制(共享内存)
- 指向eigen matrixxd的子行,表现得像vectorxd
- 如何从双指针数组创建 Eigen::VectorXd
- 将Eigen::VectorXd类型转换为std::vector
- 在访问Eigen::VectorXd时使用0作为第二个索引是否安全?
- 将Rcpp::NumericVector转换为Eigen::VectorXd
- 如何在Eigen中定义VectorXd数组