gpt4 book ai didi

c++ - 按第 1 列值的升序对特征矩阵列值进行排序

转载 作者:太空狗 更新时间:2023-10-29 20:36:10 24 4
gpt4 key购买 nike

我在 Eigen 中有一个 n x 3 矩阵。我想通过按升序对第一列中的值进行排序来重新排列第二列和第三列的值。例如在排序之前:

  1  4  6
-2 5 2
3 1 0

根据第 1 列值的升序排序后:

 -2 5 2
1 4 6
3 1 0

我不知道如何处理这个问题。我可以将每一列读入一个 vector 并使用 std::sort 对第 1 列 vector 进行排序,但我看不到如何为第 1 列中的排序值保留第 2 列和第 3 列中的相应值。n 的值是已知的并且是固定的,如果这有任何帮助的话。

最佳答案

基于second Option by xjcl ,我创建了一个基于 lambda 的选项,它可以很容易地包含在头文件中:

#include <Eigen>
#include <algorithm>
#include <vector>

void eigen_sort_rows_by_head(Eigen::MatrixXd& A_nx3)
{
std::vector<Eigen::VectorXd> 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::VectorXd const& t1, Eigen::VectorXd const& t2){ return t1(0) < t2(0); } );

for (int64_t i = 0; i < A_nx3.rows(); ++i)
A_nx3.row(i) = vec[i];
};

此选项还通过引用获取目标矩阵。然而,我想它可以改进,我希望得到帮助:

  • 让它就位(使用 Eigen SWAP )
  • 允许指定可变数量的列(0 到 n),用于按给定顺序进行比较。其余列按字典顺序使用以打破平局。
  • 允许传递(可选)一个函数/PRNG 来打破关系,如果有的话。

此外,尽管 Eigen 中有警告,我们是否可以不使用 auto 进行自动模板推导?

关于c++ - 按第 1 列值的升序对特征矩阵列值进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39693909/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com