问题标签 [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.

0 投票
1 回答
73 浏览

eigen3 - eigen3 中的 head 函数产生错误的结果

我想得到向量的一个子集,下面的代码没有给出正确的结果。但如果我写

e 是对的。为什么下面的代码是错误的?谢谢!

0 投票
1 回答
835 浏览

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' 是我需要存储结果的地方。关于如何实现这一目标的任何建议?先谢谢了。

0 投票
1 回答
773 浏览

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>

我对这些方法是我想要的吗?我该如何使用它们?我是否应该避免使用它们,因为它们是内部的,因此可能会更改和弃用?

0 投票
1 回答
1879 浏览

matlab - Eigen 库可以容纳多大的矩阵?

我正在处理大规模数据,例如目前可能感兴趣的 300000 x 300000 矩阵。由于“内存不足”错误,在 matlab 中处理真的很困难,所以我决定使用 EIGEN。矩阵大小中的特征是否有任何限制?

0 投票
1 回答
1559 浏览

c++ - 固定大小的特征类型作为参数

我正在尝试编写一个采用固定大小特征类型的函数(但以标量类型为模板,例如浮点/双精度)。我已阅读http://eigen.tuxfamily.org/dox/TopicFunctionTakingEigenTypes.html但我无法使其完美运行。

这是函数定义:

现在我使用它如下:

我想,我需要使用某种MatrixBase<Derived>,但是我该如何限制大小,因为该函数仅对长度为 3 的向量有意义。

编辑:我重新定义了函数如下。它有效,但有更好的方法吗?

0 投票
2 回答
2817 浏览

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)

谢谢你,
基思

更新:鉴于下面接受的解决方案,我想重新发布正确的代码作为人们的参考:

0 投票
1 回答
899 浏览

matlab - C++中有没有比MATLAB的eig函数更快的特征值分解方法?

为什么eig()MATLAB中的运行速度如此之快?它是如何制作的?我使用 Eigen 的 EigenSolver,它比 MATLAB 慢很多。使用Intel-MKL? 我们能否实现与 MATLAB 相同或更高的性能?或BLAS/ LAPACK/ ATLAS/ ARPACK/ OpenBLAS/ GotoBLAS/ ACML?特征值分解的工业解决方案是什么?

0 投票
1 回答
1276 浏览

c++ - 我可以使用 Eigen 求解 xA=b 形式的线性方程组,其中 A 是稀疏的吗?

我需要将我的 MATLAB 代码转换为 C++,其中包括 xA=0 形式的线性方程。

我知道 Eigen 可以处理线性方程 Ax=b。我在问:有没有办法使用 Eigen for C++(Visual Studio 2010)来求解线性方程组 xA=b,A 是稀疏矩阵?如果没有,我可以使用什么库?

感谢您的任何帮助。

0 投票
1 回答
812 浏览

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 的依赖性不是问题。)

以下是参考资料:(所以元,大声笑):

0 投票
2 回答
612 浏览

c++ - 将 Matlab 中的以下矩阵代码转换为 C++ 中的 Eigen 时出现问题

H、W、R、V 是矩阵,并且已经用各自的大小进行了初始化。“beta”是一个整数,“myeps”是一个浮点数。对于矩阵实现,我目前使用了 Eigen 库。但是,我不确定将此 Matlab 代码成功转换为基于 Eigen 的 C++ 代码的语法。

Matlab代码

C++ 代码(到目前为止我尝试过的)

这段代码正确吗?

仅供参考 - 这是 NMF 算法中的一个步骤(基于 beta 散度的非负矩阵分解)。

任何帮助将不胜感激。