首页 > 解决方案 > 如何删除特征矩阵中的重复行?

问题描述

我试图在特征中对 MatrixXi 应用唯一性。但是我在 eigen 库中没有找到任何解决方法或 api。

我的目标是:

MatrixXi mat = {{1,2,3},{2,3,1},{4,5,6},{1,2,3},{1,3,2},{4,3,5},{4,5,6}}

应用唯一性后,我需要

auto mat_unique = {{1,2,3},{1,3,2},{2,3,1},{4,3,5},{4,5,6}}

我需要为更大的矩阵应用唯一性。

eigen 中是否有任何解决方法或 APi?

提前致谢

标签: c++eigeneigen3

解决方案


我找到了解决我的问题的方法。这是这个

但解决方案仅用于排序,而不用于删除重复项。所以需要在中间多加一行代码。

void eigen_sort_unique_rows_by_head(Eigen::MatrixXi& A_nx3)
{
    std::vector<Eigen::VectorXi> vec;
    for (int64_t i = 0; i < A_nx3.rows(); ++i)
        vec.push_back(A_nx3.row(i));

    std::sort(vec.begin(), vec.end(), [](Eigen::VectorXi const& t1, Eigen::VectorXi const& t2){ return t1(0) < t2(0); } );

    auto it = std::unique(vec.begin(), vec.end());
    vec.resize(std::distance(vec.begin(),it));

    A_nx3.resize(vec.size(),3);
    for (int64_t i = 0; i < vec.size(); ++i)
        A_nx3.row(i) = vec[i];
};

推荐阅读