在给定布尔向量的情况下,如何从C++特征数组中移除某些系数

How do I remove certain coefficients from a C++ Eigen array, given a boolean vector?

本文关键字:数组 特征 C++ 向量 布尔 情况下      更新时间:2023-10-16

我有一个Eigen::VectorXd v,我想创建另一个向量w,它只包含来自v的满足某些标准的系数,比如积极性,比如

Eigen::VectorXd v(3);
v << -1, 0, 1;
w = v(v > 0);
std:: cout << v; // prints  -1, 0, 1
std:: cout << w; // prints 1

如何在Eigen中做到这一点?

v复制到w中,用std::sortw进行排序,然后用std::find_if找到第一个非正值。这将是你合格价值观清单的末尾。

您可以将任何其他条件与std::sort一起使用。

using namespace std;
using namespace Eigen;
template<typename T>
void push_back(VectorXd &v, T val, T ref)
{
    if (val > ref /*Or Your condition*/) {
        v.conservativeResize(v.size() + 1);
        v[v.size() - 1] = val;
    }
}
int main()
{
    VectorXd v(3); 
    v << 1, 2, 3; 
    const double ref = 0.0f;
    push_back(v, 4.0, ref);
    for (size_t i = 0; i < v.size(); i++)
        cout << v(i) << "  ";
    return 0;
}

你明白了,你甚至可以将第一个论点模板化。