gpt4 book ai didi

c++ - Eigen 的 MATLAB find()/Numpy 非零习语

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:10:43 25 4
gpt4 key购买 nike

很可能这是一个非常愚蠢的问题,但我花了相当荒谬的时间在文档中寻找它,但无济于事。

在 MATLAB 中,find() 函数为我提供了一个包含非零元素索引的数组。 Numpy 的 np.nonzero 函数做类似的事情。

我如何在 C++ Eigen 库中执行此操作?我有一个 bool 数组

typedef <bool, 10, 1> foobar = MatrixA < MatrixB;

到目前为止。谢谢!

最佳答案

不确定这是否是您问题的一部分,但要构建适当的元素不等式结果,您必须首先将矩阵转换为数组:

MatrixXd A,B;
...
Matrix<bool,Dynamic,Dynamic> C = A.array()<B.array();

现在 CAB 大小相同,并且 C(i,j) = A(i,j) < B (i,j)。

要查找真实条目的所有索引(假定列优先顺序),您可以使用这个紧凑的 c++11 例程---如 libigl 的 conversion table 所述:

VectorXi I = VectorXi::LinSpaced(C.size(),0,C.size()-1);
I.conservativeResize(std::stable_partition(
I.data(), I.data()+I.size(), [&C](int i){return C(i);})-I.data());

现在 IC.nonZeros() 长并且包含 C 中真实条目的索引。这两行实质上实现了 find

关于c++ - Eigen 的 MATLAB find()/Numpy 非零习语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16249329/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com