gpt4 book ai didi

将 Eigen::VectorXd 转换为 Eigen::MatrixXd 的 c++ lambda 函数

转载 作者:搜寻专家 更新时间:2023-10-31 01:30:58 24 4
gpt4 key购买 nike

我需要一个 lambda 函数来转换 Eigen::VectorXdEigen::MatrixXd不幸的是,当我尝试通过 const 引用传递时它不起作用。为什么我不能这样做?有什么解决方法吗?

#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::VectorXd 转换为 Eigen::MatrixXd 的 c++ lambda 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46652992/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com