问题标签 [eigen3]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
eigen3 - eigen3 中的 head 函数产生错误的结果
我想得到向量的一个子集,下面的代码没有给出正确的结果。但如果我写
e 是对的。为什么下面的代码是错误的?谢谢!
c++ - c ++将非模板化特征向量作为函数参数传递并在函数中对其进行修改
我正在实现派生类的函数成员(在基类中声明为虚拟)。其中一个参数是vectorXd,它是存储操作结果的地方。
我阅读了“以特征类型作为参数的编写函数”(http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html),他们的破解依赖于模板化函数,将通用特征对象作为可能的参数。就我而言,我认为它不会起作用,因为您似乎不能混合使用虚拟和模板。
另一方面,我知道我的参数将始终是 VectorXd 类型,我什至可以在进入函数之前将其调整为正确的大小,这样在函数内部就不需要调整大小。我正在尝试通过引用传递向量作为 const 并使用 const_cast 能够进行我需要的修改的方法,但我仍然得到一个链接错误:
错误 LNK2001:未解析的外部符号“public:virtual void __thiscall problem::f(class method *,class Eigen::Matrix const &,class Eigen::Matrix const &)”(?f@problem@@UAEXPAVmethod@@ABV? $Matrix@N$0?0$00$0A@$0?0$00@Eigen@@1@Z)
在这里,“问题”是基类,“f”是函数,“方法”是另一个类(我的函数中也需要该类型的对象)。
在问题的定义中,我有:
在派生的定义中:问题我有:
'y' 是我需要存储结果的地方。关于如何实现这一目标的任何建议?先谢谢了。
c++ - 用 Eigen 替换 LDLT 分解
我正在用非常大的对称矩阵(~800mb)做一些线性代数,我正在尝试几种不同的分解。目前,我正在实现 LDLT,我想利用它通过用 L^T 覆盖矩阵的上三角形来将内存需求减半。尽管 Eigen 的文档并没有列出这样做,但内部命名空间中有一些隐藏的方法可能会做我想要的。
这些方法可以在这些结构中找到:
template<> struct ldlt_inplace<Lower>
和http://eigen.tuxfamily.org/dox/LDLT_8h_source.htmltemplate<> struct ldlt_inplace<Upper>
我对这些方法是我想要的吗?我该如何使用它们?我是否应该避免使用它们,因为它们是内部的,因此可能会更改和弃用?
matlab - Eigen 库可以容纳多大的矩阵?
我正在处理大规模数据,例如目前可能感兴趣的 300000 x 300000 矩阵。由于“内存不足”错误,在 matlab 中处理真的很困难,所以我决定使用 EIGEN。矩阵大小中的特征是否有任何限制?
c++ - 固定大小的特征类型作为参数
我正在尝试编写一个采用固定大小特征类型的函数(但以标量类型为模板,例如浮点/双精度)。我已阅读http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html但我无法使其完美运行。
这是函数定义:
现在我使用它如下:
我想,我需要使用某种MatrixBase<Derived>
,但是我该如何限制大小,因为该函数仅对长度为 3 的向量有意义。
编辑:我重新定义了函数如下。它有效,但有更好的方法吗?
c++ - 布尔乘法与异或,非或(使用特征矩阵库)
我正在尝试实现汉明纠错码,为此我需要获取一个布尔向量(数据)并将其与一个布尔矩阵(汉明生成矩阵)相乘,执行 XOR 运算(而不是看起来像 OR Eigen 的默认布尔行为)。在这个简单的教程中可以找到我正在做的一个例子:http: //michael.dipperstein.com/hamming/
我不一定要使用 Eigen,所以如果您有解决方案,请随时提出 Eigen 以外的建议。
例如,一些 C++ 代码可以编译,但不能以正确的方式工作:
目前导致:1 1 1 1 0 1 0
但我需要:1 0 1 1 0 1 0
不同之处在于默认行为是相乘,然后对每个相乘进行 OR。由于我需要 XOR 而不是 OR,想知道使用 Eigen 执行此操作的最佳方法是什么?
如果这没有意义,很高兴尝试和详细说明。
顺便说一句,不确定这是否重要,但我正在使用 G++ 开发 MacBook Air。今天刚刚下载了 Eigen,所以它的概率是最新的(eigen3)
谢谢你,
基思
更新:鉴于下面接受的解决方案,我想重新发布正确的代码作为人们的参考:
matlab - C++中有没有比MATLAB的eig函数更快的特征值分解方法?
为什么eig()
MATLAB中的运行速度如此之快?它是如何制作的?我使用 Eigen 的 EigenSolver,它比 MATLAB 慢很多。使用Intel-MKL
? 我们能否实现与 MATLAB 相同或更高的性能?或BLAS
/ LAPACK
/ ATLAS
/ ARPACK
/ OpenBLAS
/ GotoBLAS
/ ACML
?特征值分解的工业解决方案是什么?
c++ - 我可以使用 Eigen 求解 xA=b 形式的线性方程组,其中 A 是稀疏的吗?
我需要将我的 MATLAB 代码转换为 C++,其中包括 xA=0 形式的线性方程。
我知道 Eigen 可以处理线性方程 Ax=b。我在问:有没有办法使用 Eigen for C++(Visual Studio 2010)来求解线性方程组 xA=b,A 是稀疏矩阵?如果没有,我可以使用什么库?
感谢您的任何帮助。
c++ - Eigen::Ref<> 与 std::reference_wrapper<> 的优缺点是什么?
看起来Eigen::Ref<>
,在 Eigen 3.2 中std::reference_wrapper<>
引入和在 C++11 中引入实现了非常相似的目标。
显然,Eigen::Ref<>
不会像 std::reference_wrapper<> 那样引入 C++11 依赖项,但是还应该考虑什么?(对我来说,C++11 的依赖性不是问题。)
以下是参考资料:(所以元,大声笑):
c++ - 将 Matlab 中的以下矩阵代码转换为 C++ 中的 Eigen 时出现问题
H、W、R、V 是矩阵,并且已经用各自的大小进行了初始化。“beta”是一个整数,“myeps”是一个浮点数。对于矩阵实现,我目前使用了 Eigen 库。但是,我不确定将此 Matlab 代码成功转换为基于 Eigen 的 C++ 代码的语法。
Matlab代码
C++ 代码(到目前为止我尝试过的)
这段代码正确吗?
仅供参考 - 这是 NMF 算法中的一个步骤(基于 beta 散度的非负矩阵分解)。
任何帮助将不胜感激。