草庐IT

eigen_scope

全部标签

c++ - 结合 Eigen 和 CppAD

我想使用由Eigen线性代数中的CppAD。一个示例类型是Eigen::矩阵。由于CppAD::AD是自定义数字类型必须提供此类型的NumTraits。CppAD提供文件中的那些cppad/example/cppad_eigen.hpp.这使得以下最小示例编译:#include#includeintmain(){typedefdoubleScalar;typedefCppAD::ADAD;//independentvariablevectorEigen::Matrixx(4);CppAD::Independent(x);//dependentvariablevectorEigen::M

c++ - C++11 中的 BOOST scoped_lock 替换

我面临这样一种情况,我必须用C++11中的等效项替换BOOSTscoped_lock。在visualstudio2013下。由于c++11不支持scoped_lock,我不确定下面的替换代码是什么。我应该选择lock_guard还是try_lock?boost::mutex::scoped_lockobjectLock(ObjectVectorMutex,boost::try_to_lock);if(objectLock){//...}在代码中我有以下“等待”语句if(ObjectsCollection.empty()){//Thisiswherewewaittilsomethingi

c++ - 在类 : scoped_ptr or shared_ptr? 中将智能指针作为参数传递

我有一个类在一个公共(public)方法中创建一个对象。该对象是私有(private)的,对类的用户不可见。此方法然后调用同一类中的其他私有(private)方法并将创建的对象作为参数传递:classFoo{...};classA{private:typedefscoped_ptrFooPtr;voidprivateMethod1(FooPtrfooObj);public:voidshowSomethingOnTheScreen(){FooPtrfooObj(newFoo);privateMethod1(fooObj);};};我相信在这种情况下正确的智能指针将是一个scoped_pt

c++ - 为什么memcpy复制Eigen矩阵数据失败,std::copy成功?

当我使用Eigen创建矩阵时,如下所示:Eigen::MatrixXdM(3,3);M产生147258369我可以用指针遍历数据,打印每个元素:double*d=M.data();for(inti=0;i产生123456789我还可以使用std::copy将其复制到堆栈上相同类型的数组,然后打印该数组的元素:doubledata_copy[9];std::copy(M.data(),M.data()+M.size(),data_copy);for(inti=0;i产生123456789但是,我似乎无法使用memcpy进行等效复制。这只能复制第一个元素:doubledata_memcop

c++ - Eigen::RowVector 迭代器

有人能告诉我到底如何迭代Eigen::RowVectorXf吗?我在网上和文档中查找了3个小时,我所能找到的只有fromthislink我可以通过以下方式访问它:vector(i)vector[i]我有一个:autovec=std::make_shared(rowIndex.size());我想用词频填充它。Eigen::RowVectorXf::InnerIteratorit(vec);it;++it不起作用,并且Eigen::RowVectorXf::Iteratorit(vec);it;++it不存在。唯一似乎有效的是:for(inti=0;irow(0).size();i++)

c++ - 将 Eigen 中的多个变换组合成一个变换矩阵

我在Eigen中有几个转换,形式为平移(Eigen::Vector3f)和旋转(Eigen::Quaternionf)。我想按照我选择的顺序将所有这些转换组合成一个4x4转换矩阵Eigen::Matrix4f。例如,我想按照A、B、C、D、E的顺序应用以下转换:Eigen::Vector3ftranslation_A;Eigen::Quaternionfrotation_B;Eigen::Quaternionfrotation_C;Eigen::Quaternionfrotation_D;Eigen::Vector3ftranslation_E;实现此目标的最简单方法是什么?到目前为止

c++ - 在 C 项目中使用 Eigen

我正在做一个从Internet获得的C项目,我正在尝试向该项目添加一些涉及线性代数的函数。在我以前的C++工作中,我通常依赖Eigen来进行线性代数。有没有办法将Eigen用于C项目?如果是,我应该怎么做才能让它发挥作用?(仅仅添加Eigen头文件是不够的,因为例如标准C++文件不会自动包含在内) 最佳答案 Eigen是一个库,它大量使用C++中不存在的功能。因此,它不能直接从C翻译单元使用。但是,您可以将使用Eigen的部分包装在一个单独的共享库中,并公开一个C接口(interface)。这是一个如何编写这样一个库的小例子。图书馆

python - 基准矩阵乘法性能 : C++ (eigen) is much slower than Python

我正在尝试评估与C++相比,Python的性能有多好。这是我的Python代码:a=np.random.rand(1000,1000)#typeisautomaicallyfloat64b=np.random.rand(1000,1000)c=np.empty((1000,1000),dtype='float64')%timeita.dot(b,out=c)#15.5ms±560µsperloop(mean±std.dev.of7runs,100loopseach)这是我在发布机制中使用Xcode编译的C++代码:#include#include#includeusingnamespa

c++ - 如何使用线性代数的C++模板库Eigen?

我有一个由矩阵组成的图像处理算法,我有自己的矩阵操作代码(乘法、逆...)。但我使用的处理器是ARMCortex-A8处理器,它有用于矢量化的NEON协处理器,因为矩阵运算是SIMD运算的理​​想情况,我要求编译器(-mfpu=neon-mfloat-abi=softfp)生成NEON我的代码的指令,但编译器没有这样做,然后我也尝试为Matrix操作编写我自己的NEON内在函数代码,但我发现这样做很难。所以,我想到了利用Eigenpromise矩阵运算向量化的库。因此,我立即下载了EigenC++库,并尝试按照他们的教程中的说明使用它,但不幸的是,当我运行他们的exampleprogr

c++ - 在简单的情况下使用 scoped_ptr 是否有点矫枉过正?

我在像这样的小函数中使用scoped_ptr。这样我就不必调用delete了。这是这种用法的矫枉过正吗?我的团队成员更喜欢原始指针和删除。如果这恰好用在非常关键的路径中,那么使用scoped_ptr的成本是多少?这不应该是内联的并且完全等同于在优化的二进制文件中使用普通删除吗?voidmyfunc(){boost::scoped_ptrobjptr=someFactory::allocate();callsomeotherfunc(objptr.get());} 最佳答案 我不确定对性能的影响,但是在这里使用scoped_ptr确保