问题标签 [eigen]

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 投票
3 回答
3792 浏览

c++ - 使用 OpenMP 和 Eigen 会导致无限循环/死锁

我正在解决一个更大的问题,当我尝试使用 OpenMP 并行化一些循环时遇到了一个错误。我用下面一些更简单的代码重现了这个问题,这些代码模仿了我自己的代码。

问题是当我运行程序时,它会随机进入某种无限循环/死锁(CPU 是 100%,但什么也不做)。从我的测试中可以看出,其中一个线程尝试计算矩阵-矩阵乘积,但由于某种原因从未完成。

我知道,如果您启用 OpenMP,Eigen 将使用 OpenMP 并行化矩阵-矩阵产品。我还在此之外添加了另一个并行循环。但是,如果我通过定义 EIGEN_DONT_PARALLELIZE 来禁用 Eigen 的并行化,仍然会出现此错误。

我在带有 Eigen 3.0.4 的 MacOS 10.6.8 上使用 gcc 版本 4.6.0 20101127。

我无法弄清楚可能出了什么问题...

0 投票
1 回答
1561 浏览

c++ - 在 Python 中使用 Eigen 对象

在 Python 中使用 Eigen 对象有哪些资源?我知道 PyEigen,但我似乎找不到任何新的发展。还有别的事吗?

0 投票
1 回答
2246 浏览

c++ - eigen 中的组件式条件/分段定义操作

有没有办法使用特征来实现(伪代码):

其中所有变量都是 Eigen::Array 的。也就是说,对于 X 的每个分量,如果该分量上的 BooleanExpr 为真,则 A 的对应分量计算为 ExprTrue,否则为 ExprFalse。

我现在像这样实现它:

但这会计算每个组件上的两个 Expr*,当 Expr 很昂贵时,这感觉不对。

事实上,我想把它推广到 X 的分段定义函数,所以我可以计算类似(伪代码)的东西:

即 X 的分量上的整数表达式的结果确定用于计算 A 的相应分量的表达式。

可能是我只是走错了路,并且已经有一种方法可以在本征中获得相同的结果,我只是想不通。

0 投票
1 回答
1058 浏览

c++ - 使 Eigen::Vector 看起来像点向量

我想以一种可以与之交互的方式表示 2D 形状,就好像它是点的向量一样,特别是我希望能够调用 operator[]at()在其上调用并返回对像 2D 点一样的事物的引用。目前我只使用一个类,它的唯一成员变量是一个点向量,并且在其元素上逐点定义了各种算术和几何运算。

但是,在我的代码的其他部分,我需要将 n 个点的向量视为 2n 维空间的元素并对其执行基本的线性代数(例如,将向量投影到 R^2n 的给定子空间上)。目前,我Eigen::VectorXd每次想要执行此操作时都会创建一个对象,然后在执行这些操作后转换回来。我不想这样做,因为我经常进行转换,以至于所有的复制都是一个明显的低效率来源。

如果我将数据存储为双精度/浮点数/整数的平面数组,我可以将指向其第 n 个元素的指针转换为指向 Point 的指针(其成员将只是一对双精度数/浮点数/整数)。但是,由于我不知道 Eigen 用于向量的内部表示(并且它可能会改变),所以这是不可能的。

有解决这个问题的明智方法吗?我可以在Eigen::Vector任何地方使用 s,但我真的希望大多数代码能够假装它正在处理一组点。

0 投票
3 回答
304 浏览

c++ - 在一系列相关的附加对象上执行旋转变换的最快方法

假设我有两个(例如两个,实际上是一些 n > 1)“相互连接”的矩形棱柱,这样它们相邻面上的 4 个顶点在内存中是相同的顶点。所以就像两个木块,一个叠放在另一个上,底部有 4 个顶点,中间有 4 个,两者共享,顶部有 4 个。现在,我希望能够首先在“顶部”木块上进行特定旋转,就好像它在具有这 4 个共享顶点的中心点的铰链上一样。

因此,就像肘部一样,假设它只能以特定角度弯曲 45 度,为了执行旋转,我围绕那个不可见的铰链中心点旋转了构成对象的 8 个顶点。在此过程中,另一个块的 4 个共享顶点有些移动,但由于铰链是它们之间的中心点,它们并没有“平移”离开底部块。我想称它们为木制是违反直觉的,因为它们会以特定的方式变形,但我试图将其设置为可视化。无论如何,假设我希望能够以不同的方式旋转这个底部块,但让顶部块表现得像它被连接一样。因此,如果底部块移动,顶部块会随之摆动,但也会随着它们之间的铰链上的任何弯曲而摆动。

我正在考虑通过轴角或四元数逐步进行转换,从“最顶层”块开始,沿着依赖链向下工作,在当前块和“上方”块上的每个顶点上执行旋转。但是,这将需要对所有顶点进行偏移,以将当前铰链作为原点,执行旋转,然后反转之前的偏移,为此链中的每个步骤。有没有更有效的方法来处理这个问题?我的意思是速度效率,在内存中拥有额外的预处理数据并不是什么大问题。也可能有一段时间我不能指望拥有这样一个线性依赖链(例如顶部块最终连接到底部块以形成一个环,也许)。

0 投票
1 回答
2618 浏览

c++ - 代码可能无法使用 Eigen 库语法问题编译?

当我编译我得到这个错误 test.cpp:2:23: error: Eigen/Dense: No such file or directory

但是 Eigen/Dense 确实存在我的 cpp 文件位于 /Eigen 所在的目录中。有人可以帮忙吗?

0 投票
1 回答
3226 浏览

c++ - Eigen Vector4d 作为函数参数?

我正在尝试将 Eigen::Vector4d 传递给这样的函数:

VC++2005 编译器给了我以下错误:

错误 C2719: 'quat': 带有 __declspec(align('16')) 的形参不会对齐

Eigen::Vector3d 对象作为参数不会发生这种情况。我注意到,在一些在线讨论中,Vector4d 类对它的对齐特别挑剔,比其他罐装 typedef 更重要。在类中使用 Vector4d 时,我发现有必要使用EIGEN_MAKE_ALIGNED_OPERATOR_NEW覆盖宏的宏new是否有类似的解决方法来传递它们的参数?

0 投票
3 回答
1272 浏览

c++ - 如何获得指向 Eigen operator() 的函数指针

我想要一个指向特征矩阵的 operator() 函数的函数指针。特别是 operator() Eigen 的 VectorXi 矩阵类,它采用单个索引。即我打电话时使用的运营商:

我试过的是:

但这给了我很长的错误:

获取指向此运算符的函数指针的正确方法是什么?

0 投票
1 回答
3590 浏览

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

当我使用 Eigen 创建矩阵时,如下所示:

生产

我可以用指针遍历数据,打印每个元素:

生产

我还可以使用 std::copy 将其复制到堆栈上相同类型的数组中,然后打印该数组的元素:

生产

但是,我似乎无法使用 memcpy 进行等效复制。这只设法复制第一个元素:

生产

memcpy 没有做我期望的事情的任何充分理由?(还是我使用不当?)

0 投票
1 回答
535 浏览

c++ - 模板实例化 - 将 C++11 的 sizeof...() 运算符与某些类一起使用时没有匹配的函数

考虑以下代码 (C++11),它使用 Eigen 3 库 (http://eigen.tuxfamily.org):

类“mat”只是为了证明使用自己的类不会发生错误,而只会发生在 Eigen::Matrix 类中。

有人能想出为什么会发生这种情况的原因或线索吗?或者发布解决方案?

谢谢!

编辑:我在 ubuntu 11.10 上使用 g++ 4.6.1 这是编译器输出:

EDIT2:我想我不够清楚:最让我惊讶的是,如果我将一个固定值作为第二个模板参数传递(如 bar() 的最后两行),一切正常,只使用 sizeof...( ) 运算符会导致错误,并且仅在与 Eigen::Matrix 一起使用时。