如何使用 Eigen 3 表达“<array-of-true-or-false> = <array> <= <scalar>”?
Posted
技术标签:
【中文标题】如何使用 Eigen 3 表达“<array-of-true-or-false> = <array> <= <scalar>”?【英文标题】:How do I express "<array-of-true-or-false> = <array> <= <scalar>" using Eigen 3? 【发布时间】:2013-04-10 23:24:00 【问题描述】:我正在使用 Eigen 3 模板库将一些 MATLAB 代码移植到 C++,并且我正在为这个常见问题寻找一个好的映射MATLAB 成语:
K>> [1 2 3 4 5] <= 3
ans =
1 1 1 0 0
因此,比较一个数组和一个标量,返回一个具有相同形状的布尔数组。
我了解 Eigen 的 Array 类具有系数比较运算符,但如果我正确解释文档,它们仅适用于另一个数组;不是标量值。
是否有一些我错过的选项可以与标量进行比较?或者如果做不到这一点,创建一个形状适当的 Array 并填充表达式的 RHS 的标量值是一种很好的惯用方式?
【问题讨论】:
【参考方案1】:感谢#eigen
IRC 频道的ChriSopht_:
VectorXd compareMat = ...;
double cutoff = 3;
Matrix<bool, Dynamic, 1> result = compareMat.array() <= cutoff;
所以,诀窍是使用.array()
来获得系数运算符,当然然后获得正确的返回类型......
【讨论】:
如果您不想处理返回类型并且您使用的是 C++11,您也可以随时使用auto result = compareMat.array() <= cutoff;
。以上是关于如何使用 Eigen 3 表达“<array-of-true-or-false> = <array> <= <scalar>”?的主要内容,如果未能解决你的问题,请参考以下文章
Eigen C ++;具有Eigen :: Transform的欧几里德变换