- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我需要一个 lambda 函数来转换 Eigen::VectorXd
到 Eigen::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/
如果你去this Eigen page ,你会看到你可以初始化 VectorXd带有 #include #include int main(int argc, char **argv) {
我有兴趣初始化 Eigen::VectorXd使用另一个值的 vector Eigen::VectorXd vector ,基于 vector将指出将使用哪些元素的索引。 也就是说, // This
如何在 std::vector 中复制 vector (Eigen::vectorXd)到另一个 std::vector 中的另一个 vector (Eigen::vectorXd) std::vec
我想从一个函数返回一个 Eigen::Vector 并想知道什么是正确的方法。有点像 Eigen::VectorXd& getMesh(int N) { Eigen::VectorXd mes
我是 Eigen 的初学者。我已搜索但未找到此问题的答案。 我有一个双指针数组,即 double** x 我无法控制。它以这种格式出现,我对此无能为力。我想构造一个 Eigen::VectorXd v
我有一个双指针,在其中存储一些数据。 我想直接在指针上创建一个 VectorXd 而无需复制。也就是说,VectorXd 中存储的数据只是指针中存储的数据。它们是共享的。 我知道创建一个 Vector
我有一个 Measurement有两个 Eigen::VectorXd 的对象成员 -- 一个用于 position和另一个velocity . 测量值通过扫描排列在数据集中——即,在每个时间步,一个
Eigen::VectorXd有一个 Scalar operator()(Index i)它返回索引处的系数 i在 vector 中。然而,由于 Eigen::VectorXd是一种特殊类型的 Eig
也许有人知道,Eigen中是否可以转发声明类型MatrixXd & VectorXd? 编译时出现如下错误: /usr/include/eigen3/Eigen/src/Core/Matrix.h:3
我有一个很大的m×n内存块,可以将其视为长度为n #include int main() { const int m = 100; const int n = 70; std::vect
我正在尝试将 std::set 与 Eigen 库中的 VectorXd 一起使用: typedef VectorXd Vec; bool(*fn_pt)(Vec,Vec) = vecCompare;
我正在尝试通过减少 OpenMP 来并行执行以下循环; #define EIGEN_DONT_PARALLELIZE #include #include #include #include #
我想在Eigen中定义一个VectorXd数组,下面是我的代码 void function(VectorXd * b, ...) { [snippet] vectorrows())>
我最近一篇文章中的一位评论者告诉我,我需要更好地利用 C++11 move 语义来处理代码中的瓶颈。以下是需要修复的简化版本。 #include #include #include void m
我正在寻找一种直接、快速的方法来转换 list至 MatrixXd .我该怎么做? Map listV(list) 不编译。 我也在考虑迭代 list并填写MatrixXd必然,但这可能会很慢且不必要
我有一个函数,它所做的就是 Eigen::VectorXd x(%s); x 4000 个参数)上运行它时,一切都很好。但是当我在更大的上做时,我无法编译,我得到了 clang: error: un
以前有人问过类似的问题,在这里: Converting between NumericVector/Matrix and VectorXd/MatrixXd in Rcpp(Eigen) to per
假设我有一个 6 维 Eigen::VectorXd Eigen::VectorXd flat; flat.resize(6); flat M(flat.data(), 3, 2); Eigen::
我有两个 Eigen::VectorXd 对象,A 和 B,具有相同的维度 n。 我想创建一个新的 vector C,这样: 如果 B[i] 是 NaN,则 C[i] = A[i] 否则:C[i] =
我实现了一个比较运算符 operatorbool{return v1 对我不起作用,例如,下面的代码工作正常: #include "Eigen/Dense" #include #include u
我是一名优秀的程序员,十分优秀!