c++:特征库新手排序
c++: Eigen Library newbie sort
我一辈子都无法弄清楚为什么这不能正常工作。它似乎没有返回第 k 个元素。
typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic> matrix;
double test(matrix& D, int k)
{
auto d = D.row(1);
std::nth_element(d.data(),d.data()+k, d.data()+d.size());
return d(k) ;
}
我也试过
template <typename ScalarType, typename Derived>
void Sort(Eigen::MatrixBase<Derived> &xValues)
{
std::sort(xValues.derived().data(), xValues.derived().data()+xValues.derived().size());
}
double test(matrix& D, int k)
{
auto d = D.row(1);
Sort<double>(d);
return d(k) ;
}
任何帮助非常感谢。
编辑:-
我刚刚尝试更改
auto d = D.row(1);
自
Eigen::VectorXd rowD = D.row(1);
....
而且似乎工作正常。
对此有点困惑。
默认情况下,
特征矩阵是列主矩阵。 这意味着,矩阵的一行不是连续的 C 数组,您不能将数据指针用作迭代器。
例如,3x4 矩阵将存储为:
0 3 6 91 4 7 102 5 8 11
现在,row(1)
会
1 4 7 10
但是您传递给nth_element()
的指针迭代器将访问
1 2 3 4
如果将 matrix
typedef 更改为 row-major,则代码有效:
typedef Eigen::Matrix<double, Eigen::Dynamic, Eigen::Dynamic, Eigen::RowMajor> matrix;
更新:您编辑的示例有效,因为您将行复制到向量。 对于向量(一维矩阵),数据存储是行主还是列主都无关紧要。
相关文章:
- 二叉排序树无法编译
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- C++选择排序算法中的逻辑错误
- 使用C++程序合并排序没有得到正确的输出
- 计算排序向量的向量中唯一值的计数
- 排序算法c++
- 使用2个键的cpp-stl::优先级队列排序不正确
- 将结构向量排序为子组
- 在c++中尝试对对象数组进行排序时,出现std:bad_alloc错误
- 如何对点云数据进行排序
- 对字符串进行排序时,在c++中处理sort()
- 是否有类似std::lower_bound的函数,而不需要排序/分区输入
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 下面是排序算法O(n)吗
- std::sort()函数无法对向量的一部分进行排序
- shell排序中的交换和比较
- clang格式:禁用排序包含
- 我是c ++的新手,你能解释一下在这种情况下的指针吗
- 显示错误输出的简单数组排序程序
- c++:特征库新手排序