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

时间:2014-09-07 04:56:56

标签: c++ eigen

我有一个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做到这一点?

2 个答案:

答案 0 :(得分:0)

v中复制w,使用wstd::sort进行排序,然后使用std::find_if找到第一个非正值。这将是符合要求值列表的结尾。

您可以对std::sort使用任何其他条件。

答案 1 :(得分:-1)

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;
}

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