私は独学で c++ と固有値を一度に学んでいるので、これは簡単な質問かもしれません。
n と 0 "<" m "<" n と、float の n-ベクトル d が与えられます。具体的にするには:
VectorXf d = VectorXf::Random(n)
d の m 番目に大きいエントリより小さいか等しい d のすべてのエントリのインデックスを含む m-vector d_prim onf integers が必要です。効率が重要です。データに描画がある場合、d_prim に、その m 番目に大きいエントリよりも小さい d の最初の 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);
}
しかし、それには2つの問題があります:
- うまくいきません
- 機能したとしても、d(m) より小さいエントリのインデックスを見つけるために、d の (コピー) を 1 回渡す必要があります。これは必要ですか?
一番、