如何使用 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() &lt;= cutoff;

以上是关于如何使用 Eigen 3 表达“<array-of-true-or-false> = <array> <= <scalar>”?的主要内容,如果未能解决你的问题,请参考以下文章

编写用于检测 Eigen 中的矩阵表达式的类型特征

Eigen C ++;具有Eigen :: Transform的欧几里德变换

在 Eigen 中使用原始 c 样式矩阵

如何使用 Eigen 从 vector<vector<float>> 创建矩阵? [复制]

1.4eigen中的块运算

如何在 C++ 中将 typedef 与类初始值设定项参数一起使用?