问题标签 [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 投票
2 回答
5711 浏览

c++ - 如何在 Eigen3 中调整向量的大小

我将两个 Eigen3 向量包装在一个模板LineSegment<T,dim>类中。你可以这样使用它:

它包含一个模板化的方法来更改组件的尺寸。这是修剪的定义:

所以我的问题是,我怎样才能组成返回值,如上所示?这应该支持增加和减少维度。

我尝试使用 Eigen3 resize(int)方法,但如果没有看到有关混合矩阵大小的警告,就无法让它工作。

最终,这应该有效:

我对 C++ 模板相对较新,如果这不仅仅是一个 API 问题并且与模板有关,我将不胜感激。

0 投票
1 回答
3257 浏览

c++ - 将特征 Affine3d 转换为 Affine2d

我有一个3D仿射变换,我希望从中丢弃任何 z 轴信息。有没有一种方便的方法可以从 a 转换Affine3d为 and Affine2d

0 投票
3 回答
21450 浏览

c++ - cv::Mat 转换为特征矩阵并返回

我有几个特征向量存储在cv::Mat其中,每一行都是一个特征向量(这里有几行这样的:)[ x1 y1 x2 y2 x3 y3.... ]。我必须对每个特征向量应用 SVD,为此我使用 Eigen 库。但是,在应用 SVD 之前,必须将特征矩阵转换为Eigen::Matrix形式。

稍后,我必须将 SVD 结果转换回cv::Mat.

谁能建议一个很好的方法来做到这一点?我需要它的原因cv::Mat是因为我必须将它输入到 OpenCV 中的神经网络,并且只cv::Mat允许输入矩阵。

谢谢!!!

0 投票
0 回答
253 浏览

numerical-methods - 为什么在 eigen 中使用 ILUT perconditioner 执行 BICGSTAB 线性求解器时会出现“估计错误”-1.#IND

我想问一个问题,当我使用 eigen(C++ 库,进行数值线性计算)来求解线性方程组时,我使用双共轭梯度 BICGSTAB 和 Incomplete LU preconditioner,但是,结果 bg.error()("estimated错误”)变为-1.#IND,1次迭代后,线性方程组的大小为20000,有人可以帮我解决这个问题吗?我也尝试了其他小尺寸,例如200,没关系。

0 投票
2 回答
971 浏览

c++ - GCC C++11 调试构建,发布失败

我有一个项目我已经工作了一段时间,总是在调试中。今天我尝试构建一个版本,它无法编译并抛出一些非常奇怪的错误。虽然调试编译没有任何警告,但发布抛出:

两个 CMake 版本都启用了 c++11:

我如何跟踪是什么导致了 Release 中的编译错误?

编辑我正在使用 Cmake 2.8 并尝试使用 gcc-4.6.3 和 4.7.2 进行编译,并且都有同样的问题。

EDIT#2使用 -std=c++0x 而不是 c++11 时问题仍然存在。

EDIT#3降级到 g++4.6 并没有太大帮助。错误现在简单地更改为:

EDIT#4我已经删除<thread>了首先引起问题的。然后是<mutex><atomic>。现在它是任何使用std::shared_ptr<Blah>. 在我看来,好像 Release 根本不想用 C++11 编译。这是故意的吗?

0 投票
2 回答
381 浏览

debugging - 如何从 clang 替换失败错误中获取更多信息?

我有以下std::begin围绕 Eigen3 矩阵的包装器:

替换失败,我得到一个编译器错误(错误:没有匹配函数调用 'begin')。对于此重载,clang 输出以下内容:

我希望选择此重载。我期望类型是doubleand int,即它们被推断为我希望它们被推断(并且希望是正确的)。通过查看该功能,我看不到任何可能实际失败的东西。

时不时我会遇到类似的错误。在这里,clang 告诉我:替换失败,我没有将这个函数放入重载决议集中。但是,这根本不能帮助我调试。为什么替换失败了?究竟什么地方不能代替?对我来说唯一明显的是编译器知道,但它故意不告诉我:(

  • 是否有可能强迫铿锵告诉我这里到底是什么失败了

  • 这个功能很简单,我遇到了问题。在更复杂的功能中,我猜事情只会变得更糟。你如何去调试这些类型的错误?

0 投票
3 回答
7347 浏览

c++ - 如何将特征 FFT 与 MatrixXf 一起使用?

我是 Eigen 图书馆的新手。我想计算特征矩阵的 FFT。但是,我这样做的尝试表明不受支持的 Eigen FFT 模块不能与 MatrixXf 一起使用。我想完成类似的事情:

这是可以实现的吗?欢迎任何其他建议。从 matlab 迁移到 Eigen 花了我大量的自我说服力,除非不可避免,否则我宁愿不使用不同的库。谢谢。

0 投票
2 回答
339 浏览

c++ - 指向特征数据的“std::list”的指针

我使用 Eigen3 二维向量作为 opengl 绘图的 2D 点,将它们存储在列表中:

现在,我需要一个 GLfloat 数组来将原始浮点坐标值的整个数据结构传递给显卡:

有没有更有效的方法来创建阵列以传递给显卡?像通过points.begin()并找出偏移量是什么并避免遍历所有点?

我的意思是..在内存中的x和y坐标Eigen::Vector2d必须存储在一些连续的空间中..所以..我想我可以将它直接传递给显卡..但我无法理解如何。

0 投票
2 回答
5506 浏览

c++ - Eigen中矩阵的最大尺寸是多少?

就我而言(具有 16GB 内存的 64 位 ubuntu,使用 Eigen3),我编写了 MatrixXd m(M,M); 其中M = 100,000,运行时程序崩溃,并报:

what(): std::bad_alloc
中止(核心转储)

使用动态 2 dim 数组,程序运行良好。Eigen 中(密集)矩阵的大小是否有硬性限制?

0 投票
1 回答
468 浏览

c++ - 当我使用 Eigen 密集矩阵数据结构时,我应该期待什么?

我需要在我的程序中使用矩阵数据结构,而 C++ 有 2d 数组,它的级别非常低,而像 Eigen 这样的一些库提供了更高级别的矩阵数据结构。但在我看来,无论一个库在 svd 等一些高技能的操作中表现如何,在包括 read(access)、write、sum、dot 在内的基本操作上的快速速度应该是此类库的先决条件. 因为在实际应用中,这样的基本操作可能比那些高技能的操作频繁得多,如果库在这些操作上的速度很慢,可能会成为系统的负担甚至瓶颈。

所以我用二维数组和 Eigen3 密集矩阵 (MatrixXd) 编写了一些非常简单的程序,并比较了它们在 4 种基本操作上的表现,结果发现大多数时候,二维数组胜过 Eigen3,这相当令人失望。我在下面列出了一些我的测试结果(代码在最后的附录中):

10000X10000矩阵,编译命令:g++ -o test.o test.cpp -O0 -msse2

特征:

[!COST] 初始化:6.8 秒。

[!COST] 读取:14.85 秒。

[!COST] 写入:23.02 秒。

[!COST] 总和:3.28 秒。

[!COST] 点:3.12 秒。

共产党:

[!COST] 初始化:1.81 秒。

[!COST] 读取:2.4 秒。

[!COST] 写入:3.4 秒。

[!COST] 总和:0.63 秒。

[!COST] 点:0.52 秒。

10000X10000矩阵,编译命令:g++ -o test.o test.cpp -O3 -msse2

特征:

[!COST] 初始化:2.44 秒。

[!COST] 读取:2.16 秒。

[!COST] 写入:2.18 秒。

[!COST] 总和:0.26 秒。

[!COST] 点:0.26 秒。

共产党:

[!COST] 初始化:1.71 秒。

[!COST] 读取:2.06 秒。

[!COST] 写入:2.24 秒。

[!COST] 总和:0.15 秒。

[!COST] 点:0.06 秒。

但是,我对此仍有一些疑问,也许我不应该期望矩阵结构的更高级别抽象应该像其原始版本一样快,如果是这样,我应该期望使用诸如 Eigen 之类的库吗?请注意,在我的程序中,有一些像 SVD 这样的高技能操作,而还有一些更基本的操作,例如访问矩阵和写入矩阵。

附录,test.cpp: