特征布尔数组切片

eja*_*ang 8 c++ matlab matrix slice eigen

在MATLAB中,通常从矩阵/数组中切出满足某些条件的值(称为逻辑索引).

vec = [1 2 3 4 5];
condition = vec > 3;
vec(condition) = 3;
Run Code Online (Sandbox Code Playgroud)

我如何在Eigen中做到这一点?到目前为止,我有:

Eigen::Matrix<bool, 1, 5> condition = vec.array() > 3;
Run Code Online (Sandbox Code Playgroud)

Amr*_*mro 12

试试这个:

#include <iostream>
#include <Eigen/Dense>

int main()
{
    Eigen::MatrixXi m(1, 5);
    m << 1, 2, 3, 4, 5;
    m = (m.array() > 3).select(3, m);
    std::cout << m << std::endl;

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

  • 实际上,对于给定的问题(即,值的上限),只有`m.cwiseMin(3)`应该工作(并且通常更快). (3认同)

小智 0

正如此处类似问题的答案中所指出的:使用 Eigen 的子矩阵和索引,libigl 将此功能添加到了 Eigen 中。

igl::slice(A,indices,B);
Run Code Online (Sandbox Code Playgroud)

相当于

B = A(indices)
Run Code Online (Sandbox Code Playgroud)