问题标签 [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.
c++ - c++:将特征定义矩阵传递给函数,并使用它们 - 最佳实践
我有一个函数,它要求我传递一个相当大的矩阵(我使用 Eigen 创建的) - 尺寸范围为 200x200 -> 1000x1000。该功能比这更复杂,但它的核心是:
是因为当我将其设置为等于 mTest 时,在 RAM 中为数组找到可用空间需要更长的时间来运行更大尺寸的矩阵需要更长的时间吗?当我切换到稀疏数组时,这似乎要快得多。
如果我需要传递大型矩阵,并且我想最小化矩阵大小对运行时的增量影响,那么这里的最佳实践是什么?目前,同一个程序在 c++ 中的运行速度比在 Matlab 中慢,显然我想加快速度!
最好的,
本
c++ - 将 std::map 与 Eigen 3 一起使用
为了提高效率,我需要编写一个代码,该代码采用 Eigen 3 VectorXi 中定义的整数向量,并将该向量映射到字符。就像 Python 中的字典一样。我怎样才能做到这一点?Eigen 文档以相反的方式做事(见下文)——它将一个字符映射到一个向量。我无法让它反向工作。有没有人试过这个?
c++ - 矩阵乘积的 Cholesky 的特征和 C++11 类型推断失败
我正在尝试使用 Eigen 和 C++11“自动”类型对矩阵乘积及其转置进行 cholesky 分解。当我尝试做的时候问题就来了
我正在使用 XCode 6.1,Eigen 3.2.2。我得到的类型错误是here。
这个最小的例子显示了我机器上的问题。c
将from的类型更改auto
为MatrixXd
以查看它的工作原理。
有没有办法在仍然使用汽车的同时完成这项工作?
作为一个附带问题,是否有性能理由不断言矩阵MatrixXd
在每个阶段都是 a?使用 auto 将允许 Eigen 将答案保留为它喜欢的任何奇怪的模板表达式。我不确定将其键入为 MatrixXd 是否会导致问题。
c++ - 库适配器性能损失
我正在尝试包装 Eigen3 线性代数库,使其语法变得更清晰。然而,作为第一步,当我创建 + 运算符重载(通过 += 重载)时,包装器立即遭受 3 倍的性能损失。您能否提供一些有关问题出在哪里以及如何解决的见解?谢谢。
c++ - Poisson 方程的 Eigen 共轭梯度与 SimplicialLLT
我使用 Eigen 的稀疏矩阵功能在 c++ 中对一个 100x100 的正方形域(所有边都有 neumann bcs)使用有限差分,并内置求解器来计算 Ax=b 中的 x。
我已经尝试了以下求解器,但是从阅读http://eigen.tuxfamily.org/dox-devel/group__TopicSparseSystems.html中的文档获得的时间结果与我所期望的完全不同,该文档为不同的求解器提供了典型的时间尺度。特别是,文档表明共轭梯度应该是解决这个系统的最快方法之一,它给出了 0.239 秒的时间尺度来解决比我的系统更大的 Poisson SPD。相比之下,该文档建议 SimplicialLLT 大约需要 3 倍的时间。
当我运行每个求解器时,我得到以下结果: - 共轭梯度:25 秒 - LLT:0.35 秒
我想知道是否有人可以帮助我理解为什么这两个求解器之间存在两个数量级,尤其是与文献相比,为什么 CG 似乎被 LLT 击败了?此外,如果其他人知道我如何通过使用与其他软件包不同的方法来显着加快求解器的速度,那么欢迎提出建议!
我正在通过以下方式实现求解器:
这里A是有限差分拉普拉斯算子,b是场的点源向量。
谢谢!
本
c++ - 块和表达式必须有一个常量值错误
我想从一个矩阵A块创建一个矩阵B。A的大小发生了变化,所以我试图实现以下目标
其中 N 是 A 的列数。我收到此错误the expression must have constant value.
如何解决此问题?我试过使用const_cast<>
,但我仍然遇到同样的问题。
c++11 - CGAL ConvexHull 和 Eigen
我如何使用我自己的数据和 CGAL 来构造凸包。特别是我想使用一种Eigen3
类型并以某种方式将其包装成 CGAL 可以直接使用它,而无需将所有内容复制Eigen3
Vector2d
到 CGALPoint_2
类中?
特征类型都有成员函数.x() , .y(), .z()
有人可以介绍如何实现这一点,内核扩展教程很难理解......
更新
到目前为止,我想出了一个自定义迭代器,它存储对Eigen::Matrix
(指针或Eigen::Ref
类)的引用并迭代 2x1 向量的列。这只是难题的一部分:其次,我设法简单地 typedef Point_2
asEigen::Vector2d
并使用内核扩展教程(见上文),但我仍然不知道如何将整个难题组合在一起?(我明天发布代码)
eigen - 如何提取 Eigen::Affine3d 变换的非平移部分?
给定一个Eigen::Affine3d
变换,你如何有效地提取一个Eigen::Matrix3d
由仿射 4×4 矩阵的左上角 3×3 角组成的?
目前我使用以下非优雅(但有效)的语法:
c++ - 可以通过共享内存从不同进程更新 Eigen3 或其他矩阵库 2D 矩阵吗?
eigen3 中这个程序的等价物是什么?我需要能够从单独的进程读取/写入共享内存矩阵,然后获取矩阵的特征值。似乎 Eigen3 可以使用 OpenMP,但我还没有找到一个明确的例子。
服务器:
客户
c++ - 非标量(块)矩阵的 Eigen3 自定义
我需要一个用于块矩阵代数的库,其中块矩阵是一个稀疏矩阵,仅存储对密集矩阵(块)的引用(指针或包装器/接口)。块的大小(行和列)是可变的。我想在这些块矩阵上定义一个代数,最好使用惰性求值。本质上,我需要这样的东西:
或者
我目前的方法是使用:
但我想有一个类来处理块的生命周期。Eigen::MatrixXd*
另外,我对后台的隐式转换不太满意long
——我想这就是发生的事情。
根据Eigen 自定义描述,不清楚这是否可行:Eigen::SparseMatrixBase 不喜欢任何非标量类型。
问题:我是否应该将 Eigen 视为解决问题的一种方法?如果是,我该如何解决非标量矩阵元素类型的问题?
非常感谢任何评论!