提问者:小点点

特征获取向量中值为真的索引数组(对于循环不是不必要的)


我有矢量

Eigen::VectorXf test(4);
test << 1.231, 1.23, 0.41, 1.233;

我正在尝试获取;lt;1/code>。我希望结果是数组形式的(std::vector很好),并且我希望利用特征优化(即,不需要loops)。结果应为0,1,3}。我该怎么做呢?

编辑

有一个问题是稠密矩阵的相似特征指数满足条件

但最关键的区别是,我使用的是向量,因此所有的东西都是基于一个维度的

编辑2

下面是我如何在xtensor中实现同样的操作,以供参考


共1个答案

匿名用户

在此基础上回答了稠密矩阵的特征指数满足条件,并利用访客得到了结果。这次我要检查这些值是否是,而不是大于1。

template<typename Func>
struct lambda_as_visitor_wrapper : Func {
    lambda_as_visitor_wrapper(const Func& f) : Func(f) {}
    template<typename S, typename I>
    void init(const S& v, I i, I j) { return Func::operator()(v, i, j); }
};

template<typename Mat, typename Func>
void visit_lambda(const Mat& m, const Func& f)
{
    lambda_as_visitor_wrapper<Func> visitor(f);
    m.visit(visitor);
}


...
    std::vector<int> indices;
    int th = 1;

    visit_lambda(open.data,
        [&indices, th](double v, int i, int j) {
            if (std::isnan(v))
                indices.push_back(i);
        });

虽然我不打算对所用的数据进行太多的详细讨论,但是这个的xtensor等价物

是慢得多,本征打卡大约快8倍(366浮点)。