我有一个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做到这一点?
答案 0 :(得分:0)
在v
中复制w
,使用w
对std::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;
}
你明白了,你甚至可以将第一个论点模板化。