如何在Eigen中执行索引操作

How do I perform index operations in Eigen?

本文关键字:执行 索引 操作 Eigen      更新时间:2023-10-16

我需要给我的代码的一部分索引到存储为Eigen::Array类型的对象。我无法将Eigen的功能扩展到该代码段,也无法将指针传递给它。我需要一个索引表示匹配值在数组中的位置。

假设我有一个这样的Eigen::Array对象:

Eigen::Array<int,5,1> mat;
mat << 0, 0, 1, 0, 1;

现在我想在上面的矩阵中找到一个元素的第一个索引,它比较等于某个条件(比如说,它们比较等于true)。

所以对于上面的输入,我希望输出为2。我也会接受4的输出,因为我不是特别担心顺序(如果存在指定搜索方向的选项,这将是好的,但不是必需的)。

std::size_t const index = FindIndex(mat);
assert(index == 2 || index == 5); // please don't fail!

我知道我可以通过数组循环并通过计数器手动实现这一点,但这在某种程度上错过了Eigen的要点。是否有一种方法来实现这一使用Eigen的内置功能(其他 unaryExpr ?

No。我看你没有什么可以用的

你可以找到有多少个非零值:

std::size_t const numNonZero = (mat != 0).count();
assert(numNonZero == 2);