草庐IT

Eigen3_DIR

全部标签

c++ - Eigen - 排序矩阵对角线

我拥有的是Eigen::MatrixXi类型的对角矩阵。我需要对角线上的元素按升序排序。例如像这样:200100070>>>020001007我以为我会简单地做:std::sort(matrix.diagonal().begin(),matrix.diagonal().end());但显然Eigen::Diagonal没有begin和end函数。所以问题是,是否有任何方法可以使用内部std::sort或任何类似优雅的方法对对角线上的元素进行排序?我浏览了官方文档,但没有找到任何有用的东西。 最佳答案 截至目前,还没有对矩阵排序的原生

c++ - 如何在 Eigen 中初始化 SparseVector

如何在Eigen中初始化一个SparseVector?以下代码:#defineEIGEN_YES_I_KNOW_SPARSE_MODULE_IS_NOT_STABLE_YET#includeusingnamespaceEigen;SparseVectorvec(3);main(){vec(0)=1.0;}给我以下错误error:callofanobjectofaclasstypewithoutappropriateoperator()orconversionfunctionstopointer-to-functiontypevec(0)=1.0;顺便说一下,vec[0]=1.0也不起作

c++ - Eigen :高效克罗内克积

我正在将Eigen用于我正在进行的项目,其中运行时性能绝对至关重要(需要满足实时约束)。到目前为止,Eigen为我提供了相当不错的性能。但是,我需要评估Kronecker产品。我正在使用Eigen不受支持的KroneckerProduct模块,但我认为它不能满足我的需求。我用来计算Kronecker乘积的两个矩阵具有固定大小(在编译时已知)和结构。一个矩阵是正方形和对角线,我们假设它是一个单位矩阵。另一个是小方阵。在代码中,像这样:MatrixXfI=MatrixXf::Identity(4,4);MatrixXfX=MatrixXf::Random(8,8);MatrixXfP=kr

c++ - 如何使用 Eigen 和 Bazel 构建一个简单的 C++ 演示?

如何使用Eigen在使用Bazel构建的C++项目中(版本0.25.2)?我喜欢使用http_archive或git_repository获取Eigen依赖项。我试过以下方法:main.cpp#include#includeusingEigen::MatrixXd;intmain(){MatrixXdm(2,2);m(0,0)=3;m(1,0)=2.5;m(0,1)=-1;m(1,1)=m(1,0)+m(0,1);std::cout工作区workspace(name="EigenDemo")load("@bazel_tools//tools/build_defs/repo:http.b

c++ - 带 OpenGL/Eigen3 的反向运动学 : unstable Jacobian pseudoinverse

我正在尝试使用OpenGL、Eigen3和"Jacobianpseudoinverse"实现简单的反向运动学测试方法。系统使用“Jacobiantranspose”算法运行良好,但是,一旦我尝试使用“pseudoinverse”,关节就会变得不稳定并开始抽动(最终它们完全卡住-除非我使用“Jacobiantranspose”回退计算).我调查了这个问题,结果发现在某些情况下Jacobian.inverse()*Jacobian的行列式为零,无法反转。但是,我在互联网(Youtube)上看到其他声称使用相同方法的演示,但他们似乎没有这个问题。所以我不确定问题的原因在哪里。代码附在下面:*

c++ - Eigen 和巨大的密集二维阵列

我正在为一个项目使用2DEigen::Array,我喜欢在大型2D数组的情况下继续使用它们。为了避免内存问题,我想使用内存映射文件来管理(读/修改/写)这些数组,但我找不到工作示例。我找到的最接近的例子是this基于boost::interprocess,但它使用共享内存(虽然我更喜欢持久存储)。缺乏示例让我担心是否有更好的主流替代解决方案来解决我的问题。是这样吗?一个最小的例子会非常方便。编辑:这是一个最小的例子,在评论中解释了我的用例:#includeintmain(){//OrderofmagnitudeoftherequiredarraysEigen::Indexrows=50

c++ - Eigen 与 Matlab : parallelized Matrix-Multiplication

我想比较Matlab在矩阵乘法中的速度与Eigen3在Intel(R)Core(TM)i7-4770CPU上的速度@3.40GHz。包含Eigen的代码:#include#include"Eigen/Dense"#include#includeusingnamespacestd;usingnamespaceEigen;constintdim=100;intmain(){std::chrono::time_pointstart,end;intn;n=Eigen::nbThreads();coutm1(dim,dim);Matrixm2(dim,dim);Matrixm_res(dim,d

c++ - Eigen::MatrixXd 到 flann::Matrix<double> 转换

假设mat下面是类型Eigen::MatrixXd并且已经包含了一些数据。为了避免重复内存,我尝试实例化一个flann::Matrix指向Eigen3分配的原始内存块的指针的对象:flann::Matrixinput(const_cast(mat.data(),mat.rows(),mat.cols())然而,我的算法输出垃圾,但对于丑陋的东西来说还不错:flann::Matrixinput(newdouble[mat.rows()*mat.cols()],mat.rows(),mat.cols());for(inti=0;i我调查了子类化基类的选项Matrix_从flann输入以创建

c++ - 在 Eigen 中乘以变换和矩阵类型

对我来说,这应该能正常工作,但事实并非如此,几乎可以肯定是我错了。尽管原则上Transform与Matrix相同,但它们不能合理地一起使用:Affine3drotMat(AngleAxisd(45.0,(Vector3d()在最后一行导致“不匹配运算符=”错误,并且就地乘法运算符导致相同的结果,尝试使用Affine3d初始化Matrix4d也不起作用。有人知道如何以任何有用的方式实际使用Transform类吗?谢谢,凸轮 最佳答案 随便写:m=m*rotMat.matrix();我不知道Eigen没有隐式定义这个乘法是否是一种疏忽,

c++ - 为什么 std::less<Eigen::VectorXd> 编译失败?

我实现了一个比较运算符operator对于Eigen::VectorXd,有时,我需要将一个比较函数传递给我的另一个函数,我厌倦了包装operator进入[](constVectorXd&v1,constVectorXd&v2)->bool{returnv1,所以我认为std::lessclass会很有用,因为据我了解,它可以生成lambda函数,只要operator已定义。但是,我发现std::less对我不起作用,例如,下面的代码工作正常:#include"Eigen/Dense"#include#includeusingnamespacestd;usingnamespaceEig