在特征中使用std::nth_element和相关的询问
using std::nth_element in eigen and a related interrogation
我正在自学c++和特征,也许这是一个简单的问题。
给定n和0"<"m"<"n,以及浮点的n向量d。具体化:
VectorXf d = VectorXf::Random(n)
我想要一个m向量d-prim onf整数,它包含小于或等于d的第m大条目。效率很重要。如果有平局在数据中,然后填充d的前m个条目小于它的第m个最大入口是可以的(我真的需要不大于第m个最大条目的m个数字的索引d)。
我试过(天真地):
float hst(VectorXf& d,int& m){
// VectorXf d = VectorXf::Random(n);
std::nth_element(d.data().begin(),d.data().begin()+m,d.data().end());
return d(m);
}
但它有两个问题:
- 它不起作用
- 即使它确实有效,我仍然需要传递一次d的副本才能找到索引小于d(m)的那些条目中的一个。这有必要吗
最佳,
std::nth_element
是您想要的(与我之前所说的相反)。它进行部分运算,使得范围[first, mth)
中的元素小于范围[mth, last)
中的元素。因此,在运行nth_element
之后,您所要做的就是将第一个m
元素复制到新的向量中。
VextorXf d = VectorXf::Random(n);
VectorXi d_prim(m);
std::nth_element(d.data().begin(), d.data.begin() + m, d.data().end());
std::copy(d.data().begin(), d.data().begin() + m, d_prim.begin());
这个答案有更多关于算法的信息。
把David Brown和Kerrek SB的答案放在一起,我认为这是"最有效的提议":
VectorXi hst(VectorXf& d,int& h){
VectorXf e = d;
VectorXi f(h);
int j=0;
std::nth_element(d.data(),d.data()+h,d.data()+d.size());
for(int i=0;i<d.size();i++){
if(e(i)<=d(h)){
f(j)=i;
j++;
if(j==h) break;
}
}
return f;
}
相关文章:
- 如何将 bsoncxx::d ocument::element 写入控制台
- [bsoncxx ]如何附加一个bsoncxx::d ocument::element TO bsoncxx::buil
- 错误 C2864:'element::next':只能在类 (STRUCT) 中初始化静态常量整数数据成员
- 在面包车文件中从MTH染色体中读取nth
- QXmlStreamReader 阅读<element><value/></element>
- Met c++ 代码" #define ELEMENT(TYPE, FIELD)"
- 如何更改C 中的nth模板参数
- gcc 未给出的 Clang 错误"attempted to construct a reference element in a tuple with an rvalue"
- 迭代器在std::unordered_map<int,std::vector<Element>>
- 'class Poco::XML::Element'没有名为'getNodeByPath'的成员
- 矢量中没有find(element)方法
- 是否可以在C++中使用命名变量(例如,键和值)而不是 .first 和 .second 进行 std::map<> "for element : container" 迭代?
- 在给定的 c++ 代码中"delete [] element"以实现一维数组的目的是什么?
- C++:如何生成帕斯卡三角形的'nth'线?
- 在 gcc 中使用 erase(begin()) 从unordered_set "remove one element"很慢
- 如何从 gdcm::Tag 访问"group, element"字符串
- GStreatermm:通过从Gst::element派生创建一个新的元素类型(在插件中)
- 缓冲区和变量Element未声明(首次在函数中使用)
- 有一个指向std::vector-element的指针,该指针目前还不存在,但稍后将被构造,这是个好主意吗?
- 查找给定的日期,即月份和月份 C/C++ 内"nth"出现的一天